字符串处理
字符串切片
${#var}:返回字符串变量var的长度
[root@CentOS7 bin]# echo $var
abcdefghijklmn
[root@CentOS7 bin]# echo ${#var}
14
${var:offset}:返回字符串变量var中从第offset个字符后(不包括第offset个字符)的字符开始,到最后的部分,offset的取值在0 到 ${#var}-1 之间
[root@CentOS7 bin]# echo $var
abcdefghijklmn
[root@CentOS7 bin]# echo ${var:4} #跳过4个字符,取后面所有字符
efghijklmn
${var:offset:number}:返回字符串变量 var 中从第 offset 个字符后(不包括第 offset 个字符)的字符开始,长度为 number 的部分
[root@CentOS7 bin]# echo $var
abcdefghijklmn
[root@CentOS7 bin]# echo ${var:4:5} #跳过4个字符后,取5个字符
efghi
${var: -length}:取字符串的最右侧几个字符
注意:冒号后必须有一空白字符
[root@CentOS7 bin]# echo $var
abcdefghijklmn
[root@CentOS7 bin]# echo ${var: -5} #从后向前取5个字符
jklmn
${var:offset:-length}:从最左侧跳过 offset 字符,一直向右取到距离最右侧 lengh 个字符之前的内容
[root@CentOS7 bin]# echo $var
abcdefghijklmn
[root@CentOS7 bin]# echo ${var:5:-2} #去掉前5个和后2个字符后,取剩下的字符
fghijkl
${var: -length:-offset}:先从最右侧向左取到 length 个字符开始,再向右取到距离最右侧 offset 个字符之间的内容
注意:-length 前空格
[root@CentOS7 bin]# echo $var
abcdefghijklmn
[root@CentOS7 bin]# echo ${var: -5:-2} #取后5个字符,去掉后2个,取剩下的字符
jkl
${var#*word}:自左而右,查找var变量所存储的字符串中,第一次出现的word, 删除字符串开头至第一次出现word字符之间的所有字符
${var##*word}:同上,不同的是,删除的是字符串开头至最后一次由word指定的字符之间的所有内容
[root@CentOS7 bin]# var=abcdeabcdefghijklmn
[root@CentOS7 bin]# echo ${var#*d} #取从前面的一个d以后的字符
eabcdefghijklmn
[root@CentOS7 bin]# echo ${var##*d} #取从前面开始最后一个d以后的字符
efghijklmn
${var%word*}:自右而左,查找var变量所存储的字符串中,第一次出现的word, 删除字符串最后一个字符向左至第一次出现word字符之间的所有字符
${var%%word*}:同上,只不过删除字符串最右侧的字符向左至最后一次出现word字符之间的所有字符
[root@CentOS7 bin]# echo ${var}
abcdeabcdefghijklmn
[root@CentOS7 bin]# echo ${var%d*} #取从后向前第一个d之前的字符
abcdeabc
[root@CentOS7 bin]# echo ${var%%d*} #取从后向前开始最后一个d之前的字符
abc
字符串替换
${var/pattern/substr}:查找var所表示的字符串中,第一次被pattern所匹配到的字符串,以substr替换之
[root@CentOS7 bin]# echo ${var}
abcdeabcdefghijklmn
[root@CentOS7 bin]# echo ${var/cde/----} #从前向后将第一次被cde匹配的字符替换为----
ab----abcdefghijklmn
${var//pattern/substr}: 查找var所表示的字符串中,所有能被pattern所匹配到的字符串,以substr替换之
[root@CentOS7 bin]# echo ${var}
abcdeabcdefghijklmn
[root@CentOS7 bin]# echo ${var//cde/----} #将所有被cde匹配的字符替换为----
ab----ab----fghijklmn
${var/#pattern/substr}:查找var所表示的字符串中,行首被pattern所匹配到的字符串,以substr替换之
[root@CentOS7 bin]# echo ${var}
abcdeabcdefghijklmn
[root@CentOS7 bin]# echo ${var/#ab/123456} #将以ab开头的行从前向后替换为123456,没被替换的保留
123456cdeabcdefghijklmn
${var/%pattern/substr}:查找var所表示的字符串中,行尾被pattern所匹配到的字符串,以substr替换之
[root@CentOS7 bin]# echo ${var}
abcdeabcdefghijklmn
[root@CentOS7 bin]# echo ${var/%mn/123456} #将以mn结尾的行从后向前替换为123456,没被替换的保留
abcdeabcdefghijkl123456
字符串删除
${var/pattern}:删除var所表示的字符串中第一次被pattern所匹配到的字符串
[root@CentOS7 bin]# echo ${var}
abcdeabcdefghijklmn
[root@CentOS7 bin]# echo ${var/cde}
ababcdefghijklmn
${var//pattern}:删除var所表示的字符串中所有被pattern所匹配到的字符串
[root@CentOS7 bin]# echo ${var}
abcdeabcdefghijklmn
[root@CentOS7 bin]# echo ${var//cde}
ababfghijklmn
${var/#pattern}:删除var所表示的字符串中所有以pattern为行首所匹配到的字符串
[root@CentOS7 bin]# echo ${var}
abcdeabcdefghijklmn
[root@CentOS7 bin]# echo ${var/#abc}
deabcdefghijklmn
${var/%pattern}:删除var所表示的字符串中所有以pattern为行尾所匹配到的字符串
[root@CentOS7 bin]# echo ${var}
abcdeabcdefghijklmn
[root@CentOS7 bin]# echo ${var/%lmn}
abcdeabcdefghijk
字符串转换
${var^^}:把var中的所有小写字母转换为大写
[root@CentOS7 bin]# echo ${var}
abcdeabcdefghijklmn
[root@CentOS7 bin]# echo ${var^^}
ABCDEABCDEFGHIJKLMN
${var,,}:把var中的所有大写字母转换为小写
[root@CentOS7 bin]#⮀echo ${var}
ABCDEABCDEFGHIJKLMN
[root@CentOS7 bin]#⮀echo ${var,,}
abcdeabcdefghijklmn