1、字符串删除
1.1 删除开头或结尾的整段字符串
格式:
${变量#匹配规则} //从头开始匹配,最短删除;
${变量##匹配规则} //从头开始匹配,最长删除;
${变量%匹配规则} //从尾开始匹配,最短删除;
${变量%%匹配规则} //从尾开始匹配,最长删除;
示例:
${i#*,} //从左往右最短匹配,以第一个逗号为休止符,将这之间的所有字符都删除(包括第一个逗号)
${i##*,} //从左往右最长匹配,以最后一个逗号为休止符,将这之间的所有字符都删除(包括最后第一个逗号)
${i%,*} //从右往左最短匹配,以第一个逗号为休止符,将这之间的所有字符都删除(包括第一个逗号)
${i%%,*} //从右往左最长匹配,以最后一个逗号为休止符,将这之间的所有字符都删除(包括最后一个逗号)
演示1:
[root@yuji ~]# i="11,22,33,44"
[root@yuji ~]# echo $i
11,22,33,44
[root@yuji ~]# echo ${i#*,}
22,33,44
[root@yuji ~]# echo ${i##*,}
44
[root@yuji ~]# echo ${i%,*}
11,22,33
[root@yuji ~]# echo ${i%%,*}
11
演示2:
[root@yuji ~]# name="the great gatsby"
[root@yuji ~]# echo $name
the great gatsby
[root@yuji ~]# echo ${name#*a}
t gatsby
[root@yuji ~]# echo ${name##*a}
tsby
[root@yuji ~]# echo ${name%a*}
the great g
[root@yuji ~]# echo ${name%%a*}
the gre
1.2 删除中间的某个字符或单词
格式:
${变量/pattern/} //删除第一次被pattern匹配到的字符或字符串
${变量//pattern/} //删除所有被pattern匹配到的字符或字符串
${变量/#pattern/} //删除开头被pattern匹配到的字符或字符串
${变量/%pattern/} //删除结尾被pattern匹配到的字符或字符串
示例:
${i/a/} //删除第一次匹配到的a
${i//a/} //删除所有的a
${i/#a/} //删除开头的a(a必须是开头第一个字符才会被删除)
${i/%a/} //删除结尾的a(a必须是结尾最后一个字符才会被删除)
演示:
[root@yuji ~]# j="aa,bb,cc,bb,aa"
[root@yuji ~]# echo $j
aa,bb,cc,bb,aa
[root@yuji ~]# echo ${j/bb/} //删除第一次匹配到的bb
aa,,cc,bb,aa
[root@yuji ~]# echo ${j//bb/} //删除所有bb
aa,,cc,,aa
[root@yuji ~]# echo ${j/#bb/} //删除开头的bb,因为开头不是bb,所以不会生效
aa,bb,cc,bb,aa
[root@yuji ~]# echo ${j/#aa/} //删除开头的aa
,bb,cc,bb,aa
[root@yuji ~]# echo ${j/%aa/} //删除结尾的aa
aa,bb,cc,bb,
2、字符串替换
格式:
${变量/旧字符串/新字符串} //替换变量内的旧字符串为新字符串,只替换第一次匹配到的
${变量//旧字符串/新字符串} //替换变量内的旧字符串为新字符串,全部替换
${变量/%旧字符串/新字符串} //替换变量内的旧字符串为新字符串,只替换结尾的
示例:
${i/a/b} //将第一个a替换成b
${i//a/b} //将所有a替换成b
${i/#a/b} //将开头的a替换成b(a必须是开头第一个字符才会被替换)
${i/%a/b} //将结尾的a替换成b(a必须是结尾最后一个字符才会被替换)
演示:
[root@yuji ~]# k="aa,bb,cc,aa"
[root@yuji ~]# echo $k
aa,bb,cc,aa
[root@yuji ~]# echo ${k/aa/999} //将第一个aa替换成999
999,bb,cc,aa
[root@yuji ~]# echo ${k//aa/999} //将所有aa替换成999
999,bb,cc,999
[root@yuji ~]# echo ${k/%aa/999} //将结尾的aa替换成999
aa,bb,cc,999
3、字符串切片
格式:
${#变量名} //获取字符串长度
#字符下标值(字符索引):
字符串内,第一个字符的下标值为0,第二个字符的下标值为1,最后一个字符的下标值为字符串长度减1。
${变量名:开始的下标值:截取长度} //截取字符串,字符的下标值(索引)从0开始
示例:
i="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
字符串长度:${#i} //此时长度为62
字符串内的字符下标值:0-61
截取第一个字符:${i:0:1}
截取前三个字符:${i:0:3}
截取最后一个字符:${i:61:1}
字符串切片在之前的文章中有详细介绍,这里不再赘述。可以查看: