bash中的字符串处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bash中的字符串处理相关的知识,希望对你有一定的参考价值。

bash的变量中存放的字符串的处理方式:

bash变量:

弱变量:

1.无需事先定义即可应用;

2.变量没有数据类型的硬性要求,默认是字符型;



1.字符串切片:

${#VAR}:返回字符类型变量的变量值的长度;

${#VAR:offset}:返回字符型变量中第"offset"之后的内容,不包括"offset"这个位置的字符;offset取值范围:0-$[${#VAR}-1]

${VAR:offset:number}:返回字符型变量中从第"offset"字符开始长度为number的字符部分;

${VAR: -length}:取字符型变量字符串最右侧的"length"长的字符串;

[[email protected] ~]# VAR=hello
[[email protected] ~]# echo ${#VAR}
5
[[email protected] ~]# echo ${VAR:2}
llo
[[email protected] ~]# echo ${VAR:1:3}
ell
[[email protected] ~]# echo ${VAR: -4}
ello


注意:在"-length"之前要留有空格;


2.基于模式(PATTERN)取字符串

${VAR#*PATTERN}:自左而右,查找VAR变量存储的字符串中,第一次被PATTERN匹配的字符,删除从字符串开始到PATTERN匹配的字符之间的所有字符;

${VAR##*PATTERN}:自左而右,查找VAR变量存储的字符串中,所有被PATTERN匹配的字符,删除从字符串开始到最后一次PATTERN匹配的字符之间的所            有字符;

${VAR%PATTERN*}:自右向左去查找VAR变量所存储的字符串中,第一次被PATTERN所匹配到的字符,删除从字符串结尾到第一个被PATTERN匹配到的字符            之间的所有字符;

${VAR%%PATTERN*}自右向左去查找VAR变量所存储的字符串中,所有被PATTERN所匹配到的字符,删除从字符串结尾到最后一个被PATTERN匹配到的字符            之间的所有字符;


[[email protected] ~]# VAR=/etc/xdg/menus
[[email protected] ~]# echo  ${VAR#*/}
etc/xdg/menus
[[email protected] ~]# echo  ${VAR##*/}
menus
[[email protected] ~]# echo  ${VAR%/*}
/etc/xdg
[[email protected] ~]# VAR=etc/xdg/menus
[[email protected] ~]# echo  ${VAR%%/*}
etc


3.查找替换:

${VAR/PATTERN/SUBSTRING}:在VAR变量中,查找能够被PATTERN所匹配的内容,将其中第一个匹配到的结果更换成SUBSTRING;

${VAR//PATTERN/SUBSTRING}:在VAR变量中,查找能够被PATTERN所匹配的内容,将其中所有匹配到的结果更换成SUBSTRING;

${VAR/#PATTERN/SUBTRING}:在VAR变量中查找行首匹配PATTERN的内容,将匹配的结果更换成SUBSTRING;

${VAR/%PATTERN/SUBTRING}:在VAR变量中查找行尾匹配PATTERN的内容,将匹配的结果更换成SUBSTRING;


[[email protected] ~]# VAR=etc/xdg/menus
[[email protected] ~]# echo ${VAR/e/a}
atc/xdg/menus
[[email protected] ~]# echo ${VAR//e/a}
atc/xdg/manus
[[email protected] ~]# echo ${VAR/#e/a}
atc/xdg/menus
[[email protected] ~]# echo ${VAR/%s/a}
etc/xdg/menua


4.查找删除:

${VAR/PATTERN}:在VAR变量中,查找能够被PATTERN所匹配的内容,将其中第一个匹配到的结果删除;

${VAR//PATTERN}:在VAR变量中,查找能够被PATTERN所匹配的内容,将其中所有匹配到的结果删除;

${VAR/#PATTERN}:在VAR变量中查找行首匹配PATTERN的内容,将匹配的结果删除;

${VAR/%PATTERN}:在VAR变量中查找行尾匹配PATTERN的内容,将匹配的结果删除;


[[email protected] ~]# VAR=etc/xdg/menus
[[email protected] ~]# echo ${VAR/dg}
etc/x/menus
[[email protected] ~]# echo ${VAR//"/"}
etcxdgmenus
[[email protected] ~]# echo ${VAR/#e}
tc/xdg/menus
[[email protected] ~]# echo ${VAR/%s}
etc/xdg/menu



5.字符串的大小写转换:


${VAR^^}:将变量当中的所有的小写字母转换成大写字母;

${VAR,,}:将变量当中的所有的大写字母转换成小写字母;

[[email protected] ~]# VAR=etc/xdg/menus
[[email protected] ~]# echo ${VAR^^}
ETC/XDG/MENUS
[[email protected] ~]# VAR=AAAAA
[[email protected] ~]# echo ${VAR,,}
aaaaa



6.变量赋值操作:

${VAR:-value}:如果变量VAR为空值或者变量未被定义,那么就直接返回value中的值;否则返回变量中VAR的值;

${VAR:+value}:如果变量VAR已经被定义且不为空,那么就直接返回value中的值;

${VAR:=value}:如果变量VAR为空或变量未被定义,那么直接返回value的值,并且将value的值赋给变量VAR;否则返回变量VAR的值;

[[email protected] ~]# VAR=AAAAA
[[email protected] ~]# echo ${VAR:-Xuwenlong}
AAAAA
[[email protected] ~]# echo ${MYVAR:-Xuwenlong}
Xuwenlong
[[email protected] ~]# VAR=AAAAA
[[email protected] ~]# echo ${VAR:+Xuwenlong}
Xuwenlong
[[email protected] ~]# echo $MYVAR
[[email protected] ~]# echo ${MYVAR:=Xuwenlong}
Xuwenlong
[[email protected] ~]# echo $MYVAR
Xuwenlong



7.变量的间接引用:

如果第一个变量的值恰好是第二个变量的变量名,从第一个变量引用第二个变量的值得方法,就称为变量的间接引用,也称为间接变量引用;

bash提供了这样的间接变量引用的房方法:

eval MYVAR=\$$VAR1


如:VAR1=VAR2,VAR2=Xuwenlong

[[email protected] ~]# VAR1=VAR2
[[email protected] ~]# VAR2=Xuwenlong
[[email protected] ~]# eval MYVAR=\$$VAR1
[[email protected] ~]# echo $MYVAR
Xuwenlong


以上是关于bash中的字符串处理的主要内容,如果未能解决你的问题,请参考以下文章

argparse 处理 bash 命令中的字符串和空格

#8 bash变量中的字符串处理

bash颜色显示方案bash配置文件及bash变量字符串处理

Bash编程中的字符串处理

其他文本处理命令以及bash变量中的一些字符串的处理方法

CSP核心代码片段记录