字符串处理工具
Linux bash内部拥有强大的字符串处理功能,具体功能按章节进行叙述。
1.字符串切片
语法格式:
# ${var:offset:number}
# 取字符串的子串
# offset:偏移量
# number:个数
# ${var: -length}
# 取字符串的最右侧的几个字符
# 注意:冒号后必须有一个空白字符
示例:
[root@LEEMUMU ~]# tools="abcdefg"
[root@LEEMUMU ~]# echo ${tools:1:3}
bcd
[root@LEEMUMU ~]# echo ${tools: -3}
efg
[root@LEEMUMU ~]# echo ${tools:3:3}
def
2.基于模式提取字串
基于模式提取字串主要分为四种,如下:
-
其中word是指定的分隔符;功能:自左而右,查找var变量所存储的字符串中,第一次出现的word分隔符,删除字符串开头至此分隔符之间的所有字符。
# ${var#*word}
-
其中word是指定的分隔符;功能:自左而右,查找var变量所存储的字符串中,最后一次出现的word分隔符,删除字符串开头至此分隔符之间的所有字符。
# ${var#*word}
-
其中word是指定的分隔符;功能:自右而左,查找var变量所存储的字符串中,第一次出现的word分隔符,删除此分隔符至字符串尾部之间的所有字符。
# ${var%word*}
-
其中word是指定的分隔符;功能:自右而左,查找var变量所存储的字符串中,最后一次出现的word分隔符,删除此分隔符至字符串尾部之间的所有字符。
# ${var%%word*}
示例1:
[root@LEEMUMU ~]# mypath="/etc/init.d/functions"
[root@LEEMUMU ~]# echo ${mypath#*/}
etc/init.d/functions
[root@LEEMUMU ~]# echo ${mypath##*/} # 适用于取基名
functions
[root@LEEMUMU ~]# echo ${mypath%/*} # 适用于取路径名
/etc/init.d
[root@LEEMUMU ~]# echo ${mypath%%/*}
[root@LEEMUMU ~]#
示例2:
[root@LEEMUMU ~]# url="http://www.leemumu.com:80"
[root@LEEMUMU ~]# echo ${url##*:} # 取端口号
80
[root@LEEMUMU ~]# echo ${url%%:*} # 取协议
http
3.查找替换
注意:PATTERN中使用glob风格的通配符。关于glob风格的通配符可参考以下博客。https://blog.csdn.net/weixin_44983653/article/details/95232625#bash_411
-
查找var所表示的字符串中,第一次被PATTERN所匹配到的字符串,将其替换为SUBSTI所表示的字符串。
# ${var/PATTERN/SUBSTI}
-
查找var所表示的字符串中,所有被PATTERN所匹配到的字符串,并将其全部替换为SUBSTI所表示的字符串。
# ${var//PATTERN/SUBSTI}
-
查找var所表示的字符串中,行首被PATTERN所匹配到的字符串,将其替换为SUBSTI所表示的字符串。
# ${var/#PATTERN/SUBSTI}
-
查找var所表示的字符串中,行尾被PATTERN所匹配到的字符串,将其替换为SUBSTI所表示的字符串。
#${var/%PATTERN/SUBSTI}
示例:
[root@LEEMUMU ~]# love="wo ai tangtang,tangtang ai wo"
[root@LEEMUMU ~]# echo ${love/wo/pangpang} # 第一次匹配到的替换
pangpang ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love//wo/pangpang} # 所有匹配到的替换
pangpang ai tangtang,tangtang ai pangpang
[root@LEEMUMU ~]# echo ${love/#wo/pangpang} # 行首匹配到的替换
pangpang ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love/%wo/pangpang} # 行尾匹配到的替换
wo ai tangtang,tangtang ai pangpang
4.查找删除
注意:PATTERN中使用glob风格的通配符。关于glob风格的通配符可参考以下博客。https://blog.csdn.net/weixin_44983653/article/details/95232625#bash_411
-
查找var所表示的字符串中,第一次被PATTERN所匹配到的字符串,并将其删除。
# ${var/PATTERN}
-
查找var所表示的字符串中,所有被PATTERN所匹配到的字符串,并将其全部删除。
# ${var//PATTERN}
-
查找var所表示的字符串中,行首被PATTERN所匹配到的字符串,将其替换为SUBSTI所表示的字符串。
# ${var/#PATTERN}
-
查找var所表示的字符串中,行尾被PATTERN所匹配到的字符串,将其替换为SUBSTI所表示的字符串。
#${var/%PATTERN}
示例:
[root@LEEMUMU ~]# echo $love
wo ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love/wo} # 第一次匹配到的删除
ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love//wo} # 全部匹配到的删除
ai tangtang,tangtang ai
[root@LEEMUMU ~]# echo ${love/#wo} # 行首匹配到的删除
ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love/%wo} # 行尾匹配到的删除
wo ai tangtang,tangtang ai
[root@LEEMUMU ~]# echo ${love/%[[:lower:]]}
wo ai tangtang,tangtang ai w
[root@LEEMUMU ~]# echo ${love/#[[:lower:]]}
o ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love/#[a-Z][a-Z]}
ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love/%[a-Z][a-Z]}
wo ai tangtang,tangtang ai
[root@LEEMUMU ~]# echo ${love//[a-Z][a-Z]}
,
[root@LEEMUMU ~]# echo ${love/[a-Z][a-Z]}
ai tangtang,tangtang ai wo
5.大小写替换
-
把var中的所有小写字符转换为大写。
# ${var^^}
-
把var中的所有大写字符转换为小写。
# ${var,,}
示例:
[root@LEEMUMU ~]# echo $love
wo ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo $LOVE
WO AI TANGTANG,TANGTANG AI WO
[root@LEEMUMU ~]# echo ${love^^}
WO AI TANGTANG,TANGTANG AI WO
[root@LEEMUMU ~]# echo ${LOVE,,}
wo ai tangtang,tangtang ai wo
6.变量赋值
注意:变量赋值过程中如果VALVE有空格的话,需要使用 “” 进行区分。
-
如果var变量为空,或未设置,那么返回VALUE;否则,则返回var变量的值。
# ${var:-VALUE}
-
如果var变量为空,或未设置,那么返回VALUE,并将VALUE赋值给var变量;否则,则返回var变量的值。
# ${var:=VALUE}
-
如果var变量不空,则返回VALUE。否则,返回空值。
# ${var:+VALUE}
-
如果var为空,或未设置,那么返回ERROR_INFO为错误提示;否则,返回var值。
# ${var:?ERROR_INFO}
示例:
[root@LEEMUMU ~]# echo $love
wo ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love:-"The value is empty."}
wo ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love1:-"The value is empty."}
The value is empty.
[root@LEEMUMU ~]# echo ${love:="The value is empty."}
wo ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love1:="The value is empty."}
The value is empty.
[root@LEEMUMU ~]# echo $love1
The value is empty.
[root@LEEMUMU ~]# echo ${love:+"The value is empty"}
The value is empty
[root@LEEMUMU ~]# echo ${love2:+"The value is empty"}
[root@LEEMUMU ~]# echo ${love:?"The value is empty"}
wo ai tangtang,tangtang ai wo
[root@LEEMUMU ~]# echo ${love3:?"The value is empty"}
-bash: love3: The value is empty