六.Shell之字符串高级用法(expr)

Shell中对字符串处理命令主要有两种,一种为前面Shell三剑客之一的awk,另一种为即将介绍的expr

  • 1. ${#...}expr length (计算长度)

格式:

${#string}
#或
expr length $string

注意使用expr length 时,如果$string中有空格需要使用双引号括起来。

Demo:

$ expr length "hello world"
11
$ str="hello world"
$ expr length $str
expr: syntax error: unexpected argument “world”
$ expr length "$str"
11
$ echo ${#str}
11
  • 2. expr index (索引)

索引并不是完全匹配
格式:

expr index $string $substring

分情况进行讨论:

  • 《六.Shell之字符串高级用法(expr)》substring中的任何字符,返回0
$ expr index "hello" "889"
0
  • 《六.Shell之字符串高级用法(expr)》substring中的所有字符,返回首字符位置
$ expr index "hello" "he"
1
  • 《六.Shell之字符串高级用法(expr)》string所拥有,返回最靠前的字符位置
1
$ expr index "hello" "oh"
1
  • 3. expr match (匹配)

匹配成功返回substring的长度,匹配不成功返回0,可以使用正则表达式(不是通配符)
格式:

expr match $string $substring

分情况进行讨论:

  • 匹配整个字符串
$ expr match "hello world" ".*w.*"
11
  • 匹配到string开头,但并不完全匹配
$ expr match "hello world" "hell"
4
  • 不完全匹配且并未出现在开头
$ expr match "hello world" "world"
0
  • 4. 获取子串

格式:

${string:position}
${string:position:length}
expr substr $string $position $length

注意字符串位置从0开始
position可以使用负数,表示倒数
expr substr 中length必不可少

Demo:

$ str="1234qwer"
$ echo ${str:1}
234qwer
$ echo ${str:0}
1234qwer
$ echo ${str:1:4}
234q
  • 5. 删除子串

格式:

${string#substring}

删除在开头匹配的最短子串

${string##substring}

删除在开头匹配的最长子串

${string%substring}

删除在结尾匹配的最短子串

${string%%substring}

删除在结尾匹配的最长子串

  • 6. 替换子串

格式:

${string/substring/replacement}

仅替换第一次与substring匹配的子串

${string//substring/replacement}

替换所有的与substring匹配的子串

    原文作者:靳一鸣
    原文地址: https://www.jianshu.com/p/f77c65ef3699
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞