高级字符串

8 字符串处理

8.1 字符串切片

基于偏移量取字符串

#返回字符串变量var的长度
{#var}     

#返回字符串变量var中从第offset个字符后(不包括第offset个字符)的字符开始,到最后的部分,offset的取值在0 到{#var}-1 之间(bash4.2后,允许为负值)
{var:offset}   

#返回字符串变量var中从第offset个字符后(不包括第offset个字符)的字符开始,长度为number的部分{var:offset:number}

#取字符串的最右侧几个字符,取字符串的最右侧几个字符, 注意:冒号后必须有一空白字符
{var:  -length}

#从最左侧跳过offset字符,一直向右取到距离最右侧lengh个字符之前的内容,即:掐头去尾{var:offset:-length}

#先从最右侧向左取到length个字符开始,再向右取到距离最右侧offset个字符之间的内容,注意:-length前空格
${var:  -length:-offset}

范例:

[root@centos8 script40]#str=abcdef我你他
[root@centos8 script40]#echo {#str}
9
[root@centos8 script40]#echo{str:2}
cdef我你他
[root@centos8 script40]#echo {str:2:3}
cde
[root@centos8 script40]#echo{str:-3}
abcdef我你他
[root@centos8 script40]#echo {str: -3}
我你他
[root@centos8 script40]#echo{str:2:-3}
cdef
[root@centos8 script40]#echo {str: -2:-3}
-bash: -3: substring expression<0
[root@centos8 script40]#echo{str: -3:-2}
我
[root@centos8 script40]#echo {str:-3:-2}
abcdef我你他
[root@centos8 script40]#echo{str: -3:-2}
我
[root@centos8 script40]#echo ${str: -5:-2}
ef我

基于模式取子串

#其中word可以是指定的任意字符,自左而右,查找var变量所存储的字符串中,第一次出现的word, 删除字符串开头至第一次出现word字符串(含)之间的所有字符
{var#*word}:

#同上,贪婪模式,不同的是,删除的是字符串开头至最后一次由word指定的字符之间的所有内容{var##*word}:

范例:

[root@centos8 ~]#file="var/log/messages"
[root@centos8 ~]#echo {file#*/}
log/messages
[root@centos8 ~]#echo{file##*/}
messages
#其中word可以是指定的任意字符,功能:自右而左,查找var变量所存储的字符串中,第一次出现的word, 删除字符串最后一个字符向左至第一次出现word字符串(含)之间的所有字符
{var%word*}

#同上,只不过删除字符串最右侧的字符向左至最后一次出现word字符之间的所有字符{var%%word*}

范例:

[root@centos8 ~]#file="/var/log/messages"
[root@centos8 ~]#echo {file%/*}
var/log
[root@centos8 ~]#echo{file%%/*}
var

范例:

[root@centos8 ~]#url=http://www.magedu.com:8080
[root@centos8 ~]#echo {url##*:}
8080
[root@centos8 ~]#echo{url%%:*}
http

8.2 查找替换

#查找var所表示的字符串中,第一次被pattern所匹配到的字符串,以substr替换之
{var/pattern/substr}

#查找var所表示的字符串中,所有能被pattern所匹配到的字符串,以substr替换之{var//pattern/substr}

#查找var所表示的字符串中,行首被pattern所匹配到的字符串,以substr替换之
{var/#pattern/substr}

#查找var所表示的字符串中,行尾被pattern所匹配到的字符串,以substr替换之{var/%pattern/substr}

8.3 查找并删除

#删除var表示的字符串中第一次被pattern匹配到的字符串
{var/pattern}

删除var表示的字符串中所有被pattern匹配到的字符串{var//pattern}

删除var表示的字符串中所有以pattern为行首匹配到的字符串
{var/#pattern}

删除var所表示的字符串中所有以pattern为行尾所匹配到的字符串{var/%pattern}

8.4 字符大小写转换

#把var中的所有小写字母转换为大写
{var^^}

#把var中的所有大写字母转换为小写{var,,}

本文链接:http://www.yunweipai.com/34352.html

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/52554.html

(0)
上一篇 2021年8月6日
下一篇 2021年8月6日

相关推荐

发表回复

登录后才能评论