bash中的字符串处理

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

发表回复

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