六.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

分情况进行讨论:

  • string中匹配不到substring中的任何字符,返回0
$ expr index "hello" "889"
0
  • string中能匹配到substring中的所有字符,返回首字符位置
$ expr index "hello" "he"
1
  • substring的部分字符被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匹配的子串

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容