Bash中的字符串处理
字符串切片
//示例
[root@node1 ~]# DOMAIN=www.baidu.com
[root@node1 ~]# echo $DOMAIN
www.baidu.com
${var#*bai}
,自左而右,查找var变量中存储的字符串中第一次出现的由bai
所指明的字符,删除此字符及其左侧的所有内容
[root@node1 ~]# echo ${DOMAIN#*bai}
du.com
${var##*ba}
,自左而右,查找var变量中存储的字符串中最后一次出现的由ba
所指明的字符,删除此字符及其左侧的所有内容
[root@node1 ~]# echo ${DOMAIN##*ba}
idu.com
${var%du*}
,自右而左,查找var变量中存储的字符串中第一次出现的由du
所指明的字符,删除此字符及其右侧的所有内容
[root@node1 ~]# echo ${DOMAIN%du*}
www.bai
${var%%b*}
,自右而左,查找var变量中存储的字符串中最后一次出现的由b
所指明的字符,删除此字符及其右侧的所有内容
[root@node1 ~]# echo ${DOMAIN%%b*}
www.
字符串切片
- 偏移4个字符显示
[root@node1 ~]# echo ${DOMAIN:4}
baidu.com
- 偏移4个字符,取5个字符
[root@node1 ~]# echo ${DOMAIN:4:5}
baidu
- 取出字符串的最后几个字符,
${var: -length}
,自右向左取
[root@node1 ~]# echo ${DOMAIN: -3}
com
注意:冒号后必须有一空白字符
查找替换
- 查找var所表示的字符串中,第一次被
baidu
所匹配到字符串,以cwt
替换
[root@node1 ~]# echo ${DOMAIN/baidu/cwt}
www.cwt.com
${var//w/W}
,查找var变量存储的字符中所有能够由w
匹配到的内容,并替换为W
[root@node1 ~]# echo ${DOMAIN//w/W}
WWW.baidu.com
${var/#w/c}
,行首被w
所匹配到字符串,以c
替换之,只会匹配一次
[root@node1 ~]# echo ${DOMAIN/#w/c}
cww.baidu.com
${var/%c/C}
,查找var变量存储的字符中行尾能够由c
匹配到的内容,并替换为C
,只会匹配一次
[root@node1 ~]# unset DOMAIN
[root@node1 ~]# DOMIAN=www.baidu.ccc
[root@node1 ~]# echo $DOMIAN
www.baidu.ccc
[root@node1 ~]# echo ${DOMIAN/%c/C}
www.baidu.ccC
查找删除
${var/baidu} //查找var所表示的字符串中,第一次被baidu所匹配到字符串,删除
${var//w} //查找var所表示的字符串中,所有被w所匹配到字符串,删除
${var/#c} //查找var所表示的字符串中,行首被c所匹配到字符串,删除
${var/%c} //查找var所表示的字符串中,行尾被c所匹配到字符串,删除
注:删除比较简单,这里不作示例
字符大小写转换
${var^^}
,把var变量中的所有小写字母,全部替换为大写字母
[root@node1 ~]# echo ${DOMAIN^^}
WWW.BAIDU.COM
${var,,}
,把var变量中的所有大写字母,全部替换为小写字母
[root@node1 ~]# echo $DOMAIN
WWW.BAIDU.COM
[root@node1 ~]# echo ${DOMAIN,,}
www.baidu.com
变量赋值
${var:-word}
,如果变量var为空或未声明,则返回word所表示的字符串;否则,则返回var变量的值
[root@node1 ~]# echo $FILE //未赋值
[root@node1 ~]# echo ${FILE:-无效的变量}
无效的变量
[root@node1 ~]# echo $FILE //原变量不受影响
[root@node1 ~]# FILE=root //赋值
[root@node1 ~]# echo $FILE
root
[root@node1 ~]# echo ${FILE:-cwt}
root
${var:+word}
,如果变量var为空或未声明,忽略;否则,则返回word
[root@node1 ~]# unset FILE
[root@node1 ~]# echo ${FILE:+cwt}
[root@node1 ~]# FILE=tom
[root@node1 ~]# echo ${FILE:+cwt}
cwt
${var:=word}
,如果变量var为空或未声明,则返回word所表示的字符串,并且把word赋值为var变量,否则,则返回var变量的值
[root@node1 ~]# unset FILE
[root@node1 ~]# echo $FILE //未赋值
[root@node1 ~]# echo ${FILE:=cwt}
cwt
[root@node1 ~]# echo $FILE
cwt
${var:?error}
,如果变量var为空或未声明,则返回error为错误信息,否则,则返回var变量的值
[root@node1 ~]# echo ${FILE:?error}
-bash: FILE: error
[root@node1 ~]# FILE=cwt
[root@node1 ~]# echo ${FILE:?error}
cwt
变量的间接引用
- 如果第一个变量的值恰好是第二个变量的变量名,从第一个变量引用第二个变量的值得方法,就称为变量的间接引用,也称为间接变量引用
[root@node1 ~]# A=TOM
[root@node1 ~]# TOM=B
[root@node1 ~]# eval C=\$$A
[root@node1 ~]# echo $C
B
获取字符串的长度
[root@node1 ~]# A=Hello
[root@node1 ~]# echo ${#A}
5