Bash脚本编程之字符串处理

其实这里说得字符串处理,对应的是bash官网中的,不过直接去看这部分内容实在是太难以理解了。字符串处理会比较好理解,平常使用应该也是足够的了。

字符串切片

这块在上一篇讲解数组的文章中(https://www.linuxidc.com/Linux/2020-01/161945.htm),也大概提到了Shell Parameter Expansion除了可以对数组(array)切片以外,还可以对变量切片。

${var:offset:number}
${var: length}

[root@c7-server ~]# name="zhangwenlong" [root@c7-server ~]# echo ${name} zhangwenlong [root@c7-server ~]# echo ${name:2:5} angwe [root@c7-server ~]# echo ${name: -4} long

基于pattern取子串

这里的pattern,应该是glob或者类glob的,而非正则表达式,详见官方的。

${var#*pattern}:在变量var的值中自左向右查询pattern,若查询到,则删除值首部至第一次出现的pattern之间的所有字符。

[root@c7-server ~]# echo ${name} zhangwenlong [root@c7-server ~]# echo ${name#*wen} long [root@c7-server ~]# echo ${name} zhangwenlong

${var##*pattern}:在变量var的值中自左向右查询pattern,若查询到,则删除值首部至最后一次出现的pattern之间的所有字符。

[root@c7-server ~]# echo ${name} zhangwenlong [root@c7-server ~]# echo ${name#*n} gwenlong [root@c7-server ~]# echo ${name##*n} g

${var%pattern*}:在变量var的值中自右向左查询pattern,若查询到,则删除值尾部至第一次出现的pattern之间的所有字符。 ${var%%pattern*}:在变量var的值中自右向左查询pattern,若查询到,则删除值尾部至最后一次出现的pattern之间的所有字符。

[root@c7-server ~]# echo ${name} zhangwenlong [root@c7-server ~]# echo ${name%n*} zhangwenlo [root@c7-server ~]# echo ${name%%n*} zha

查找替换

${var/PAT/SUB}:在变量var的值中从左往右查找,只有第一次出现的PAT(pattern)会被替换成SUB(substitute)。

[root@c7-server ~]# echo ${userinfo} root:x:0:0:root:/root:/bin/bash [root@c7-server ~]# echo ${userinfo/r??t/CentOS} centos:x:0:0:root:/root:/bin/bash

${var//PAT/SUB}:在变量var的值中从左往右查找,所有出现的PAT都会被替换成SUB。

[root@c7-server ~]# echo ${userinfo} root:x:0:0:root:/root:/bin/bash [root@c7-server ~]# echo ${userinfo//r??t/centos} centos:x:0:0:centos:/centos:/bin/bash

${var/#PAT/SUB}:在变量var的值中从左往右查找,只有行首出现的PAT都会被替换成SUB。

[root@c7-server ~]# echo ${userinfo} root:x:0:0:root:/root:/bin/bash [root@c7-server ~]# echo ${userinfo/#r??t/centos} centos:x:0:0:root:/root:/bin/bash

${var/%PAT/SUB}:在变量var的值中从左往右查找,只有行尾出现的PAT都会被替换成SUB。

[root@c7-server ~]# echo ${userinfo} root:x:0:0:root:/root:/bin/bash [root@c7-server ~]# echo ${userinfo/%bash/zsh} root:x:0:0:root:/root:/bin/zsh

查找删除

${var/PAT}:在变量var的值中从左往右查找,只有第一次出现的PAT会被删除。

[root@c7-server ~]# echo ${userinfo} root:x:0:0:root:/root:/bin/bash [root@c7-server ~]# echo ${userinfo/root} :x:0:0:root:/root:/bin/bash

${var//PAT}:在变量var的值中从左往右查找,所有出现的PAT会被删除。

[root@c7-server ~]# echo ${userinfo} root:x:0:0:root:/root:/bin/bash [root@c7-server ~]# echo ${userinfo//root} :x:0:0::/:/bin/bash

${var/#PAT}:在变量var的值中从左往右查找,只有行首出现的PAT会被删除。

[root@c7-server ~]# echo ${userinfo} root:x:0:0:root:/root:/bin/bash [root@c7-server ~]# echo ${userinfo/#root} :x:0:0:root:/root:/bin/bash

${var/%PAT}:在变量var的值中从左往右查找,只有行尾出现的PAT会被删除。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/838364d770dc4c3298281fed84913125.html