注意不同的字符串索引系统:
Bash的第一个字符是从'0'开始记录的.
Awk的第一个字符是从'1'开始记录的.
${#variable} 字符串长度
stringZ=abcABC123ABCabc
echo ${#stringZ} # 15
echo `expr length $stringZ` # 15
${string:position} ${string:position:length}
# 提取子字符串
stringZ=abcABC123ABCabc
echo ${stringZ:0} # abcABC123ABCabc
echo ${stringZ:1} # bcABC123ABCabc
# 能不能从字符串的右边(也就是结尾)部分开始提取子串?
echo ${stringZ:-4} # abcABC123ABCabc
# 默认是提取整个字符串, 就象${parameter:-default}一样.
echo ${stringZ:(-4)} # Cabc ,使用 "()" 转义
echo ${stringZ: -4} # Cabc ,:后面有一个空格
# 使用圆括号或者添加一个空格可以"转义"这个位置参数.
#如果$string参数是"*"或"@", 那么将会从$position位置开始提取$length个位置参数, 但是由于可能没有$length个位置参数了, 那么就有几个位置参数就提取几个位置参数.
echo ${*:2} # 打印出第2个和后边所有的位置参数
echo ${@:2} # 同上.
echo ${*:2:3} # 从第2个开始, 连续打印3个位置参数
expr substr $string $position $length
# 在$string中从$position开始提取$length长度的子串
# 位置参数从0开始计数
stringZ=abcABC123ABCabc
echo `expr substr $stringZ 1 2` # ab
echo `expr substr $stringZ 4 3` # ABC
从开头删除最短子串 ${string#substring}
stringZ=abcABC123ABCabc
echo ${stringZ#a*C} # 123ABCabc
从开头删除最长子串 ${string##substring}
stringZ=abcABC123ABCabc
echo ${stringZ##a*C} # abc
# 截掉'a'到'C'之间最长的匹配字符串.
删除从结尾匹配的最短子串 ${string%substring}
stringZ=abcABC123ABCabc
echo ${stringZ%b*c} # abcABC123ABCa
删除从结尾匹配的最长子串 ${string%%substring}
stringZ=abcABC123ABCabc
echo ${stringZ%%b*c} # a
子串替换 ${string/substring/replacement}
# 使用$replacement来替换第一个匹配的$substring.
stringZ=abcABC123ABCabc
# 使用'xyz'来替换第一个匹配的'abc'
echo ${stringZ/abc/xyz} # xyzABC123ABCabc
# 如果$substring匹配$string的开头部分, 那么就用$replacement来替换$substring
# ${string/#substring/replacement}
stringZ=abcABC123ABCabc
# 用'XYZ'替换开头的'abc'
echo ${stringZ/#abc/XYZ} # XYZABC123ABCabc
# 如果$substring匹配$string的结尾部分, 那么就用$replacement来替换$substring
# ${string/%substring/replacement}
stringZ=abcABC123ABCabc
# 用'XYZ'替换结尾的'abc'
echo ${stringZ/%abc/XYZ} # abcABC123ABCXYZ
全部子串替换 ${string//substring/replacement}
# 使用$replacement来替换所有匹配的$substring
stringZ=abcABC123ABCabc
# 用'xyz'来替换所有匹配的'abc'.
echo ${stringZ//abc/xyz} # xyzABC123ABCxyz
唯爱与技术不可辜负
网友评论