shell 中获取子字符串的正确姿势
Posted yinguohai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
说明:
- # :截取尾部的字符串,类似于正则中的懒惰匹配法
- *~: 实际上表的是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个字符串。
以上是关于shell 中获取子字符串的正确姿势的主要内容,如果未能解决你的问题,请参考以下文章