Bash 中常見的字符串操作


連接字符串

字符串連接的方式簡單又直接:放在一起就可以了!
看下面的例子:

h="hello"
hw=${h}" world"
echo ${hw}

結果為:hello world

獲取字符串長度

${#string}

MyString=abcABC123ABCabc
echo ${#MyString}           # 結果為 15

注意這會自動去掉字符串結尾處的空格,如果在字符串中包含空格(開頭、中間或結尾),就需要使用引號把字符串包裹起來:

MyString="abcABC123ABCabc "
echo ${#MyString}           # 結果為 16

匹配字符串開頭的子串長度

expr match "$string" '$substring'
$substring 是一個正則表達式。

MyString=abcABC123ABCabc
echo $(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} # 同上。
echo ${*:2:3} # 從第 2 個開始, 連續打印 3 個位置參數。

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。

MyString=abcABC123ABCabc
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'

參考:
Linux Shell 字符串操作(長度/查找/替換)詳解
Linux腳本shell字符串處理,基本都有
shell腳本抽取文本文件中指定字符串的方法

Bash Parameter Substitution


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM