Shell脚本编程之字符串切片
1. 字符串切片
1.1. 字符串切片
格式 | 说明 |
---|---|
$ | 返回字符串变量var的长度(字符)。 |
$ | 返回字符串变量var中从第offset个字符后面(不包括第offset个字符)的字符开始,到最后的部分。 注意:offset 的取值在0 到 ${#var}-1 之间(bash4.2后,允许为负值)。 |
$ | 返回字符串变量var中从第offset个字符后面(不包括第offset个字符)的字符开始,长度为number的部分。 |
$ | 取字符串的最右侧几个字符。 注意:冒号后必须有一空白字符。 |
$ | 从最左侧跳过offset字符,一直向右取到距离最右侧lengh个字符之前的内容。 |
$ | 先从最右侧向左取到length个字符开始,再向右取到距离最右侧offset个字符之间的内容。 注意:-length前空格。 |
${#var}
|<----------- string length ----------->|
|---------------string------------------|
${var:offset}
offset + 1
|---------- cut ---------|
|---------------string------------------|
|<-- offset -->|
${var:offset:number}
offset + 1 offset + number
|----- cut ----|
|---------------string------------------|
|<-- offset -->|<-- number -->|
${var: -length}
${#var} - length ${#var}
|----- cut -----|
|---------------string------------------|
|<-- -length -->|
${var:offset: -length}
offset + 1 ${#var} - length
|- cut --|
|---------------string------------------|
|<-- offset -->| |<-- -length -->|
${var: -length:-offset}
${#var} - length + 1 ${#var} - offset
|----- cut -----|
|---------------string------------------|
|<---------- -length ---------->|
|<-- -offset -->|
1.2. 基于模式取子串
格式 | 说明 |
---|---|
$ | 功能:自左而右,查找var变量所存储的字符串中,第一次出现的word,删除字符串开头至第一次出现word字符串(含)之间的所有字符。 其中word可以是指定的任意字符。 |
$ | 贪婪模式;不同的是,删除的是字符串开头至最后一次由word指定的字符之间的所有内容。 |
示例
file="var/log/messages"
[root@centos7 ~]# echo ${file#*/}
log/messages
[root@centos7 ~]# echo ${file##*/}
messages
格式 | 说明 |
---|---|
$ | 功能:自右而左,查找var变量所存储的字符串中,第一次出现的word,删除字符串最后一个字符向左至第一次出现word字符串(含)之间的所有字符。 其中word可以是指定的任意字符。 |
$ | 贪婪模式;只不过删除字符串最右侧的字符向左至最后一次出现word字符之间的所有字符。 |
示例
file="/var/log/messages"
[root@centos7 ~]# ${file%/*}
/var/log
url=http://www.centos.com:80
[root@centos7 ~]# ${url##*:}
80
[root@centos7 ~]# ${url%%:*}
http
1.3. 查找替换
替换 | 说明 |
---|---|
$ | 首次。查找var所表示的字符串中,第一次被pattern所匹配到的字符串,以substr替换之。 |
$ | 全部。查找var所表示的字符串中,所有能被pattern所匹配到的字符串,以substr替换之。 |
$ | 行首。查找var所表示的字符串中,行首被pattern所匹配到的字符串,以substr替换之。 |
$ | 行尾。查找var所表示的字符串中,行尾被pattern所匹配到的字符串,以substr替换之。 |
1.4. 查找并删除
删除 | 说明 |
---|---|
$ | 删除首次。删除var表示的字符串中第一次被pattern匹配到的字符串。 |
$ | 删除全部。删除var表示的字符串中所有被pattern匹配到的字符串。 |
$ | 删除行首。删除var表示的字符串中所有以pattern为行首匹配到的字符串。 |
$ | 删除行尾。删除var所表示的字符串中所有以pattern为行尾所匹配到的字符串。 |
1.5. 字符大小写转换
大小写 | 说明 |
---|---|
$ | 把var中的所有小写字母转换为大写。 |
$ | 把var中的所有大写字母转换为小写。 |
1.6. 变量赋值
变量set方式 | str没有被set | str为空 | str为非空字符串 | 描述 |
---|---|---|---|---|
$ | expr | null | $str | |
$ | expr | expr | $str | |
$ | null | expr | expr | |
$ | null | null | expr | |
$ | expr str=expr |
null | $str | |
$ | expr str=expr |
expr str=expr |
$str | 类似“-”,但str会被赋值 |
$ | expr output stderr | null | $str | |
$ | expr output stderr | expr output stderr | $str |
书山有路勤为径,学海无涯苦作舟