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}
${#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}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#返回字符串变量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我
[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我
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
[ 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}:
${var#*word}:
#同上,贪婪模式,不同的是,删除的是字符串开头至最后一次由word指定的字符之间的所有内容
${var##*word}:
1
2
3
4
5
|
#其中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
[root@centos8 ~]#echo ${file#*/}
log/messages
[root@centos8 ~]#echo ${file##*/}
messages
1
2
3
4
5
|
[ 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*}
${var%word*}
#同上,只不过删除字符串最右侧的字符向左至最后一次出现word字符之间的所有字符
${var%%word*}
1
2
3
4
5
|
#其中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 ~]#echo ${file%/*}
var/log
[root@centos8 ~]#echo ${file%%/*}
var
1
2
3
4
5
|
[ 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
[root@centos8 ~]#echo ${url##*:}
8080
[root@centos8 ~]#echo ${url%%:*}
http
1
2
3
4
5
|
[ 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}
${var/pattern/substr}
#查找var所表示的字符串中,所有能被pattern所匹配到的字符串,以substr替换之
${var//pattern/substr}
#查找var所表示的字符串中,行首被pattern所匹配到的字符串,以substr替换之
${var/#pattern/substr}
#查找var所表示的字符串中,行尾被pattern所匹配到的字符串,以substr替换之
${var/%pattern/substr}
1
2
3
4
5
6
7
8
9
10
11
|
#查找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}
${var/pattern}
删除var表示的字符串中所有被pattern匹配到的字符串
${var//pattern}
删除var表示的字符串中所有以pattern为行首匹配到的字符串
${var/#pattern}
删除var所表示的字符串中所有以pattern为行尾所匹配到的字符串
${var/%pattern}
1
2
3
4
5
6
7
8
9
10
11
|
#删除var表示的字符串中第一次被pattern匹配到的字符串
$ { var / pattern }
删除 var表示的字符串中所有被 pattern匹配到的字符串
$ { var //pattern}
删除 var表示的字符串中所有以 pattern为行首匹配到的字符串
$ { var / #pattern}
删除 var所表示的字符串中所有以 pattern为行尾所匹配到的字符串
$ { var / % pattern }
|
8.4 字符大小写转换
#把var中的所有小写字母转换为大写
${var^^}
#把var中的所有大写字母转换为小写
${var,,}
${var^^}
#把var中的所有大写字母转换为小写
${var,,}
1
2
3
4
5
|
#把var中的所有小写字母转换为大写
$ { var ^ ^ }
#把var中的所有大写字母转换为小写
$ { var , , }
|
本文链接:http://www.3yyy.top/34352.html