shell 中获取子字符串的正确姿势

1699309-20190815114542640-1178878595.jpg

前言

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

说明:

  • # :截取尾部的字符串,类似于正则中的懒惰匹配法
  • *~: 实际上表的是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个字符串。

转载于:https://www.cnblogs.com/yinguohai/p/11357032.html

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值