Shell字符串操作

  1. 字符串长度
pan@HUIPA-Q9RUA:~$ string=abc123ABC456abcd
pan@HUIPA-Q9RUA:~$ expr length $string
  
16
pan@HUIPA-Q9RUA:~$ echo ${#string}

16
pan@HUIPA-Q9RUA:~$ expr "$string" : '.*'
16    #后面单引号为pattern,所以也可以得到子字符串的长度

2. 从字符串开始的位置匹配子字符串得长度

pan@HUIPA-Q9RUA:~$ expr match $string "abc.*[A-Z]"
9    #匹配为abc123ABC
pan@HUIPA-Q9RUA:~$ expr match $string ".*[0-9]"
12    #匹配到最后一位数字,则为abc123ABC456

3. 字符串索引

pan@HUIPA-Q9RUA:~$ expr index $string "C12"
4    #分别查找C、1、2出现的位置,并给出最前面的字符的位置。1为最前面的,在第四位。

4. 提取子字符串

pan@HUIPA-Q9RUA:~$ echo ${string:0}
abc123ABC456abcd
    #从第零位开始,就是整个字符串
pan@HUIPA-Q9RUA:~$ echo ${string:6}
ABC456abcd
    #从第6位开始,也就是第7个字符开始。
pan@HUIPA-Q9RUA:~$ echo ${string:6:3}
ABC
    #从第六位开始且长度为3的子字符串
pan@HUIPA-Q9RUA:~$ echo ${string:(-4)}
abcd    #最后的4位子字符串
pan@HUIPA-Q9RUA:~$ expr substr $string 1 3
abc    #也可以使用substr参数,从第1位取长度为3的子字符。
pan@HUIPA-Q9RUA:~$ expr match $string "\(.*[A-Z][0-9]\)"
abc123ABC4    #从开始匹配到最后的大写字母加数字

5. 字符串删除

pan@HUIPA-Q9RUA:~$ echo ${string#*[0-9]}
23ABC456abcd    #从左边删除到第一个匹配的子字符串,为从头到第一个数字1
pan@HUIPA-Q9RUA:~$ echo ${string##*[0-9]}
abcd    #从左边删除到最后一个匹配的子字符串,为从头到最后一个数字6
pan@HUIPA-Q9RUA:~$ echo ${string%b*}
abc123ABC456a
  #从右边删除到第一个匹配的子字符串,从尾到第一个b
pan@HUIPA-Q9RUA:~$ echo ${string%%b*}
a    #从右边删除到第后一个匹配的子字符串,从尾到最后一个b
pan@HUIPA-Q9RUA:~$ echo ${string/abc/XYZ}
XYZ123ABC456abcd
   #替换匹配到的第一个样式
pan@HUIPA-Q9RUA:~$ echo ${string//abc/XYZ}
XYZ123ABC456XYZd    #替换匹配到所有的样式

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注