Bash 中常見的字串操作
獲取字串長度
${#string}
MyString=abcABC123ABCabc echo ${#MyString} # 結果為 15
注意這會自動去掉字串結尾處的空格,如果在字串中包含空格(開頭、中間或結尾),就需要使用引號把字串包裹起來:
MyString="abcABC123ABCabc " echo ${#MyString} # 結果為 16
匹配字串開頭的子串長度
expr match "$string" '$substring'
$substring 是一個正則表示式。
MyString=abcABC123ABCabcecho $(expr match "$MyString" 'abc[A-Z]*.2') # 結果為 8
索引
expr index $string $substring
在字串 $string 中匹配到的 $substring 第一次出現的位置。
MyString=abcABC123ABCabc echo $(expr index "$MyString" C12) # 6,注意:索引是從 1 開始的。
提取子串
${string:position}
在 $string 中從位置 $position 處開始提取子串。
如果 $string 是 "*" 或者 "@",那麼將會提取從位置 $position 開始的位置引數。
${string:position:length}
在 $string 中從位置 $position 開始提取 $length 長度的子串。 MyString= abcABC123ABCabc
echo ${MyString: 3} # ABC123ABCabc,注意:此時索引是從 0 開始的。
echo ${MyString: 1: 5 } # bcABC
echo ${*: 2} # 打印出第 2 個和後邊所有的位置引數。
echo ${@: 2 } # 同上。
expr match "$string" '\($substring\)'
從 $string 的開始位置提取 $substring,$substring 是正則表示式。
MyString=abcABC123ABCabc echo $(expr match "$MyString" '\(.[b-c]*[A-Z]..[0-9]\)') # abcABC1
刪除子串
${string#substring}
從 $string 的開頭位置截掉最短匹配的 $substring。
${string##substring}
從 $string 的開頭位置截掉最長匹配的 $substring。
MyString=abcABC123ABCabc echo ${MyString#a*C} # 123ABCabc # 截掉 'a' 到 'C' 之間最短的匹配字串。 echo ${MyString##a*C} # abc # 截掉 'a' 到 'C' 之間最長的匹配字串。
${string%substring}
從 $string 的結尾位置截掉最短匹配的 $substring。
${string%%substring}
從 $string 的結尾位置截掉最長匹配的 $substring。
MyString=abcABC123ABCabc echo ${MyString%b*c} # abcABC123ABCa # 從 $MyString 的結尾位置截掉 'b' 到 'c' 之間最短的匹配。 echo ${MyString%%b*c} # a # 從 $MyString 的結尾位置截掉 'b' 到 'c' 之間最長的匹配。
當你需要構造檔名的時候,這個操作就顯得特別有用。
子串替換
${string/substring/replacement}
使用 $replacement 來替換第一個匹配的 $substring。
${string//substring/replacement}
使用 $replacement 來替換所有匹配的 $substring。
echo ${MyString/abc/ xxx} # xxxABC123ABCabc
echo ${MyString/ABC/ XXX} # abcXXX123ABCabc
# 替換第一個匹配到的子串。
echo ${MyString // abc/xxx} # xxxABC123ABCxxx
echo ${MyString // ABC/XXX} # abcXXX123XXXabc
# 替換所有匹配到的子串。
${string/#substring/replacement}
如果 $substring 匹配 $string 的開頭部分,那麼就用 $replacement 來替換 $substring。
${string/%substring/replacement}
如果 $substring 匹配 $string 的結尾部分,那麼就用 $replacement 來替換 $substring。
MyString=abcABC123ABCabc echo ${MyString/#abc/XXX} # XXXABC123ABCabc # 用 'XXX' 替換開頭的 'abc'。 echo ${MyString/%abc/XXX} # abcABC123ABCXXX # 用 'XXX' 替換結尾的 'abc'。