bash中的字符串处理
1 得到字符串长度
[root@redhat test]# s=abcdef
[root@redhat test]# expr length $s
6
[root@redhat test]# echo ${#s}
6
[root@redhat test]# expr "$s" : ".*"
6
2 查找子串
[root@redhat test]# expr index $s a
1
[root@redhat test]# expr index $s b
2
[root@redhat test]# expr index $s c
3
[root@redhat test]# expr index $s d
4
[root@redhat test]# expr index $s e
5
[root@redhat test]# expr index $s f
6
[root@redhat test]# expr index $s g
0
3 得到子字符串
语法1:expr substr startpos length 第一个字符序号为1
[root@redhat test]# expr substr $s 1 3
abc
[root@redhat test]# expr substr $s 1 11
abcdef
[root@redhat test]# expr substr $s 3 4
cdef
[root@redhat test]# expr substr $s 3 1
c
[root@redhat test]# m=1
[root@redhat test]# j=2
[root@redhat test]# expr substr $s $m $j
语法2:${x:pos:length} 第一个字符的序号为0
[root@redhat test]# expr ${s:0:1}
a
[root@redhat test]# expr ${s:2:2}
cd
[root@redhat test]# expr ${s:2:11}
cdef
[root@redhat test]# m=1
[root@redhat test]# j=2
[root@redhat test]# expr ${s:$m:$j}
bc
4 匹配正则表达式
[root@redhat test]# expr match $s "ab"
2
[root@redhat test]# expr match $s "abc"
3
[root@redhat test]# expr match $s "bc"
0
5 修改字符串掐头去尾
# 去除最小匹配前缀
## 去除最大匹配前缀
% 去除最小匹配后缀
%% 去除最大匹配后缀
[root@redhat test]# x=cccdddcccpicxxyyyxxx
[root@redhat test]# echo ${x%x*x}
cccdddcccpicxxyyyx
[root@redhat test]# echo ${x%%x*x}
cccdddcccpic
[root@redhat test]# echo ${x#c?c}
dddcccpicxxyyyxxx
[root@redhat test]# echo ${x#c*c}
cdddcccpicxxyyyxxx
[root@redhat test]# echo ${x#c*c}
cdddcccpicxxyyyxxx
[root@redhat test]# echo ${x##c*c}
xxyyyxxx
这里正则用的特殊符号是? * 并非 . *
6 字符串替换
[root@redhat test]# x=efefefef
[root@redhat test]# echo ${x/e/f}
ffefefef
[root@redhat test]# echo ${x//e/f}
ffffffff
[root@redhat test]# x=efefacacefacefcb
[root@redhat test]# echo ${x//ef/f}
ffacacfacfcb
[root@redhat test]# echo ${x/ef/f}
fefacacefacefcb
[root@redhat test]# echo ${x/e??/f}
ffacacefacefcb
[root@redhat test]# echo ${x//e??/f}
ffacacfcfb
[root@redhat test]# echo ${x/f*/z}
ez
这里正则用的特殊符号是? * , 不可以使用 regexp