shell中处理字符串小结:
假定在shell中有这么一个字符串:x="abcd"
方法一
通过 expr 命令 加length参数 expr length $x,会打印出4
4
方法二 (推荐用这种。原因?你懂得……)
echo ${#x}4
方法三
expr "$x" : ".*"4
二、查找字串
注意:返回的索引是从1开始, 失败则返回0
expr index $x "b"
2
expr index $x "a"
1
expr index $x "b"
2
expr index $x "c"
3
expr index $x "d"
4三、得到子字符串
方法一
# expr <string> startpos length
expr substr "$x" 1 3
abc
expr substr "$x" 1 5
abcd
expr substr "$x" 2 5
bcd方法二
#通过这个方式 ${x:pos:lenght}
echo ${x:1}
bcd
echo ${x:2}
cd
echo ${x:0}
abcd
echo ${x:0:2}
ab
pos=1
len=2
echo ${x:$pos:$len}
bc
四、打印匹配的长度
expr match $x "."
1
expr match $x "abc"
3
expr match $x "bc"
0
五、字符串的掐头去尾
x=aabbaarealwwvvww
echo "${x%w*w}"
aabbaarealwwvv
echo "${x%%w*w}"
aabbaareal
echo "${x##a*a}"
lwwvvww
echo "${x#a*a}"
bbaarealwwvvww
我是按照下面这种记忆法:
其中 , # 表示掐头, 因为键盘上 # 在 $ 的左面。
其中 , % 表示%, 因为键盘上 % 在 $ 的右面。
单个的表示最小匹配,双个表示最大匹配。
也就是说,当匹配的有多种方案的时候,选择匹配的最大长度还是最小长度。
六、字符串的替换
x=abcdabcd
echo ${x/a/b} # 只替换一个
bbcdabcd
echo ${x//a/b} # 替换所有
bbcdbbcd
七、bash中 利用 ${ } 还可针对不同的变数状态赋值(没设定、空值、非空值)
${shell_var-init_value} :假如 $shell_var 沒有设定,则使用 init_value 作返回值。(空值及非空值时不作处理)
${shell_var:-init_value} :假如 $shell_var 沒有设定或为空值,则使用 init_value 作返回值。 (非空时时不作处理)
${shell_var+init_value} :假如 $shell_var 设为空值或非空值,均使用 init_value 作返回值。(沒设定时不作处理)
${shell_var:+init_value} :若 $shell_var 为非空值,则使用 init_value 作返回值。 (沒设定及空值时不作处理)
${shell_var=init_value} :若 $shell_var 沒设定,则使用 init_value 作返回值,同时將 $shell_var 赋值为 init_value 。 (空值及非空值时不作处理)
${shell_var:=init_value} :若 $shell_var 沒设定或为空值,则使用 init_value 作返回值,同时將 $shell_var 赋为 init_value 。 (非空值时不作处理)
${shell_var?init_value} :若 $shell_var 沒设定,则將 init_value 输出至 stderr。 (空值及非空值时不作处理)
${shell_var:?init_value} :若 $shell_var 沒设定或为空值,则將 init_value 输出至 stderr。 (非空值时不作处理)。