shell中获取⼦字符串的正确姿势
前⾔
shell 取⼦串的⽅式有点特别,你写的匹配字符串是需要从头开始匹配的,第⼀个匹配到了才开始匹配下⼀个,这个类似于python中的match 的⼯作⽅式。
1,获取⼦串有两种⽅式
使⽤字符串匹配的⽅式去截取。其中匹配的⽅式和python中的match的⼯作⽅式很像,只是其截取的是那些没有匹配到的字符串⽽已。
使⽤下标的⽅式去截取
2,匹配的⽅式
2.1, 左边开始匹配
#:最⼩限度开始匹配
##:最⼤限度开始匹配
案例:
⚡ str="hello~world~~~Ha"
⚡ echo ${str#hello~}
world~~~Ha
⚡ echo ${str#*~}
world~~~Ha
# 没有匹配到则显⽰全部
⚡ echo ${str##~}
hello~world~~~Ha
⚡ echo ${str##*~}
Ha
说明:
# :截取尾部的字符串,类似于正则中的懒惰匹配法
shell 字符串长度
*~:实际上表的是hello~的替代写法,* 代指任意多个字符,相当于正则中的“.*"的作⽤
## :也是截取尾部的字符串,类似于正则中的贪婪匹配法
2.2, 右边开始匹配
% :最⼩限度获取头部⼦字符串
%%:最⼤限度获取头部字符串
案例:
⚡ str="hello~world~~~la,la"
⚡ echo ${str%la,la}
hello~world~~~
# "~"此时是在左边的,因为匹配的顺序变了
⚡ echo ${str%~la,la}
hello~world~~
⚡ echo ${str%~~*}
hello~world~
说明:
%:懒惰匹配法
%%:贪婪匹配法
%,%% 都是从字符串的右边开始进⾏匹配,然后截取左边没有匹配到的那些字符串。
3, 通过下标的⽅式获取
3.1, 格式
${str:start:len}
说明:
str : 表⽰被截取的字符串
start: 下标
0,1,2,,,n ,表⽰从左边开始取
0-start: 则表⽰从右边开始取start个字符串,此时len就不需要了len: 可选,表⽰需要截取的字符串长度
案例:
⚡ str="hello~world~~~la,la"
⚡ echo ${str:0:2}
he
⚡ echo ${str:2}
llo~world~~~la,la
⚡ echo ${str:2:5}
llo~w
⚡ echo ${str:0-2}
la
⚡ echo ${str:0-2:6}
la
⚡ echo ${str:0-5}
la,la
说明:
${str:0-2:6} 和 ${str:0-2}表⽰的是⼀个意思,都是从字符串右边开始取2个字符串。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。