一.字符串处理
v bash 的字符串处理工具:
(一)字符串切片:
${#var}: 返回字符串变量var 的长度
例:
[root@lxc ~]# a=" "
[root@lxc ~]# echo ${#a}
5
[root@lxc ~]#
${var:offset}: 返回 字符串变量var 中从第offset 个字符后(不包括第offset个字符)的字符开始,到最后的部分,offset的取值0 到${#var}-1 之间(bash4.2 后,允许为负值)
例:
[root@lxc ~]# a=`echo {a..z} | tr -d " "`
[root@lxc ~]# echo $a
abcdefghijklmnopqrstuvwxyz
[root@lxc ~]# echo ${a:3}
defghijklmnopqrstuvwxyz
[root@lxc ~]#
${var:offset:number} :返回字符串变量var 中从第offset个字符后(不包括第offset个字符)的字符开始,长度为number的部分
例:
[root@lxc ~]# echo ${a:3:4}
defg
[root@lxc ~]#
${var: -lengh}:取字符串的最右侧几个字符
注意:冒号后必须有一空白字
例:
[root@lxc ~]# echo ${a: -2}
yz
[root@lxc ~]#
${var:offset: -lengh}:从最左侧跳过offset 字符,一直取到字符串的最右侧lengh个字符之前(抛头去尾取中间)
例:
[root@localhost ~]# echo ${a:3: -10}
defghijklmnop
[root@localhost ~]#
(二)基于模式取子串:
${var#*word}:其中word可以是指定的任意字符功能:自左而右,查找var 变量所存储的字符串中,第一次出现的word, 删除字符串开头至第一次出现word 字符之间的所有字符
[root@lxc ~]# str=`getent passwd root`
[root@lxc ~]# echo $str
root:x:0:0:root:/root:/bin/bash
[root@lxc ~]# echo ${str#*root}
:x:0:0:root:/root:/bin/bash
${var##*word} :同上,不同的是,删除的是字符串开头至最后一次由word指定的字符之间的所有内容(即贪婪模式的删除)
[root@lxc ~]# echo ${str##*root}
:/bin/bash
[root@lxc ~]#
${var%word*} :其中word 可以是指定的任意字符;
功能:自右而左,查找var变量所存储的字符串中,第一次出现的word,删除字符串最后一个字符向左至第一次出现word字符之间的所有字符;
例:
[root@lxc ~]# echo ${str%root*}
root:x:0:0:root:/
[root@lxc ~]#
${var%%word*} :同上,只不过删除字符串最右侧的字符向左至最后一次出现word 字符之间的所有字符;
例:
[root@lxc ~]# echo $str
root:x:0:0:root:/root:/bin/bash
[root@lxc ~]# echo ${str%%root*}
[root@lxc ~]#
(三)查找替换:
${var/pattern/substi}:查找var 所表示的字符串中,第一次被pattern 所匹配到的字符串,以substi替换之
例:
[root@lxc ~]# echo ${str/root/wang}
wang:x:0:0:root:/root:/bin/bash
${var//pattern/substi}:查找var 所表示的字符串中,所有能被pattern 所匹配到的字符串,以substi 替换之
例:
[root@lxc ~]# echo ${str//root/wang}
wang:x:0:0:wang:/wang:/bin/bash
[root@lxc ~]#
${var/#pattern/substi}:查找var 所表示的字符串中,行首被pattern 所匹配到的字符串,以substi替换之
例:
[root@lxc ~]# echo ${str/#root/suwang}
suwang:x:0:0:root:/root:/bin/bash
[root@lxc ~]#
${var/%pattern/substi}:查找var 所表示的字符串中,行尾被pattern 所匹配到的字符串,以substi 替换之
例:
[root@lxc ~]# echo ${str/%bash/nologin}
root:x:0:0:root:/root:/bin/nologin
[root@lxc ~]#
(四)查找并删除:
${var/pattern} :查找var 所表示的字符串中,删除第一次pattern 所匹配到的字符串
例:
[root@lxc ~]# echo ${str/root}
:x:0:0:root:/root:/bin/bash
[root@lxc ~]#
${var//pattern} :所有
例:
[root@lxc ~]# echo ${str//root}
:x:0:0::/:/bin/bash
[root@lxc ~]#
${var/#pattern} :行首
例:
[root@lxc ~]# echo ${str/#root}
:x:0:0:root:/root:/bin/bash
[root@lxc ~]#
${var/%pattern} :行尾
例:
[root@lxc ~]# echo ${str/%bash}
root:x:0:0:root:/root:/bin/
[root@lxc ~]#
(五)字符大小写转换:
${var^^} :把var 中的所有小写字母转换为大写
例:
[root@lxc ~]# echo ${str^^}
ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
[root@lxc ~]#
${var,,} :把var 中的所有大写字母转换为小写
例:
[root@lxc ~]# echo ${str,,}
root:x:0:0:root:/root:/bin/bash
[root@lxc ~]#
(六)变量赋值
${var:-value} :如果var 为空或未设置,那么返回value ;否则,返回var 的值
例:
[root@lxc ~]# name="wang"
[root@lxc ~]# echo ${name:-"mdzz"}
wang
[root@lxc ~]# name=
[root@lxc ~]# echo ${name:-"mdzz"}
mdzz
[root@lxc ~]#
${var:+value} :如果var 不空,则返回value ,否则返回空值
例:
[root@lxc ~]# name=wang
[root@lxc ~]# echo ${name:+"mdzz"}
mdzz
[root@lxc ~]# name=
[root@lxc ~]# echo ${name:+"mdzz"}
[root@lxc ~]#
${var:=value} :如果var 为空或未设置,那么返回value ,并将value 赋值给var ;否则,则返回var 的值
例:
[root@lxc ~]# name=wang
[root@lxc ~]# echo ${name:="mdzz"}
wang
[root@lxc ~]# name=
[root@lxc ~]# echo ${name:="mdzz"}
mdzz
[root@lxc ~]#
${var:?error_info} :如果var为空或未设置 ,那么在当前终端打印error_info;否则返回var的值
例:
[root@lxc ~]# name=
[root@lxc ~]# echo ${name:?"valueisnull"}
-bash: name: valueisnull
[root@lxc ~]# name="wang"
[root@lxc ~]# echo ${name:?"valueisnull"}
wang
[root@lxc ~]#
原创文章,作者:changge,如若转载,请注明出处:http://www.178linux.com/60643