美文网首页
Bash Shell字符串操作

Bash Shell字符串操作

作者: Michael_林 | 来源:发表于2017-05-30 21:46 被阅读218次

这篇文章主要介绍了Bash Shell字符串操作总结,包含取长度、截取、查找位置、替换等等,需要的朋友可以参考下

  1. 取长度
    代码如下:
    str="abcd"
    expr length $str # 4
    echo ${#str} # 4
    expr "$str" : ".*" # 4

好像一般使用第二种

  1. 查找子串的位置
    代码如下:
    str="abc"
    expr index $str "a" # 1
    expr index $str "b" # 2
    expr index $str "x" # 0
    expr index $str "" # 0

  2. 选取子串
    代码如下:
    str="abcdef"
    expr substr "$str" 1 3 # 从第一个位置开始取3个字符, abc
    expr substr "$str" 2 5 # 从第二个位置开始取5个字符, bcdef
    expr substr "$str" 4 5 # 从第四个位置开始取5个字符, def
    echo ${str:2} # 从第二个位置开始提取字符串, bcdef
    echo ${str:2:3} # 从第二个位置开始提取3个字符, bcd
    echo ${str:(-6):5} # 从倒数第二个位置向左提取字符串, abcde
    echo ${str:(-4):3} # 从倒数第二个位置向左提取6个字符, cde

  3. 截取子串
    代码如下:
    str="abbc,def,ghi,abcjkl"
    echo ${str#ac} # 输出,def,ghi,abcjkl 一个井号(#) 表示从左边截取掉最短的匹配 (这里把abbc字串去掉)
    echo ${str##a
    c} # 输出jkl, 两个井号(##) 表示从左边截取掉最长的匹配 (这里把abbc,def,ghi,abc字串去掉)
    echo ${str#"ac"} # 输出abbc,def,ghi,abcjkl 因为str中没有"ac"子串
    echo ${str##"ac"} # 输出abbc,def,ghi,abcjkl 同理
    echo ${str#
    ac} # 空
    echo ${str##ac} # 空
    echo ${str#d
    f) # 输出abbc,def,ghi,abcjkl,
    echo ${str#df} # 输出,ghi,abcjkl
    echo ${str%al} # abbc,def,ghi 一个百分号(%)表示从右边截取最短的匹配
    echo ${str%%b
    l} # a 两个百分号表示(%%)表示从右边截取最长的匹配
    echo ${str%a*c} # abbc,def,ghi,abcjkl
    可以这样记忆, 井号(#)通常用于表示一个数字,它是放在前面的;百分号(%)卸载数字的后面; 或者这样记忆,在键盘布局中,井号(#)总是位于百分号(%)的左边(即前面)

  4. 字符串替换
    代码如下:
    str="apple, tree, apple tree"
    echo ${str/apple/APPLE} # 替换第一次出现的apple
    echo ${str//apple/APPLE} # 替换所有apple
    echo ${str/#apple/APPLE} # 如果字符串str以apple开头,则用APPLE替换它
    echo ${str/%apple/APPLE} # 如果字符串str以apple结尾,则用APPLE替换它

  5. 比较
    代码如下:
    [[ "a.txt" == a* ]] # 逻辑真 (pattern matching)
    [[ "a.txt" =~ .*.txt ]] # 逻辑真 (regex matching)
    [[ "abc" == "abc" ]] # 逻辑真 (string comparision)
    [[ "11" < "2" ]] # 逻辑真 (string comparision), 按ascii值比较

  6. 连接
    代码如下:
    s1="hello"
    s2="world"
    echo ${s1}${s2} # 当然这样写 $s1$s2 也行,但最好加上大括号
    8.将一批文件中的所有string替换
    代码如下:
    for i in file_list
    do
    vi $i <<-!
    :g/xxxx/s//XXXX/g
    :wq
    !
    done
    9.翻转
    方法一:
    使用rev命令
    方法二:
    编写脚本实现
    代码如下:
    #!/usr/bin/awk -f
    ################################################################
    # Description : duplicate rev in awk
    ################################################################
    {
    revline = ""
    for (i=1;i<=length;i++)
    {
    revline = substr(,i,1) revline
    }
    }
    END{print revline}

10.匹配
代码如下:
grep
egrep
fgrep
11.得到字符串中某个字符的重复次数
代码如下:
echo $a |tr "x" "\n" |wc -l

得到的结果需要减去1
或者
代码如下:
echo $a |awk -F"x" '{print NF-1}'

12.如何将字符串内每两个字符中间插入一个字符
使用sed
代码如下:
echo $test |sed 's/../&[insert char]/g'

相关文章

网友评论

      本文标题:Bash Shell字符串操作

      本文链接:https://www.haomeiwen.com/subject/qazrfxtx.html