一.字符串處理
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.www58058.com/60643