字符串處理

  .字符串處理

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

(0)
changgechangge
上一篇 2016-11-24 15:19
下一篇 2016-11-24 16:49

相關推薦

  • 懶人本地YUM源設置

    一、掛載本地光盤到根目錄下/media。 [root@wing-PC ~]# mount -v /dev/sr0 /media/ 二、用mv 修改/etc/yum.repos.d下面的文件。 [root@wing-PC ~]# mv -v /etc/yum.repos.d/CentOS-Base.repo / CentOS-Base.repo.bak [ro…

    系統運維 2017-08-05
  • yum使用和源碼編譯進程

    yum 是通過分析RPM的標頭數據,根據各軟件的依賴關系制作出有依賴關系時的解決方案,然后自動處理軟件的依賴性問題,以解決軟件安裝或升級的問題。  yum使用方法: yum [options] [command] [packages …] install package .. 通過yum安裝軟件包 update package .. 更新軟件包 u…

    Linux干貨 2016-08-24
  • N22-℡浮生.若夢 ╮-第二周作業

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 cp文件復制:       常用選項:     -i:交互式復制,即覆蓋之前提醒用戶確認;     -f:強制覆蓋目標文件;  &n…

    Linux干貨 2016-09-06
  • 馬哥教育網絡21期+第十二周練習博客上

    1、請描述一次完整的http請求處理過程; (1)建立或處理連接:接受請求或拒絕請求 (2)如果接受請求:     并發訪問響應模型:         單進程I/O結構:啟動一個進程處理用戶請求,而且一次只處理一個,多個請求被串行響應; &…

    Linux干貨 2016-10-17
  • 7月21號:CentOS6.8(及7)基礎配置項+Linux入門(1)

    7月21號,馬哥第二天,主要內容有三個部分:一、基本命令復習二、CentOS6.8(及7)基礎配置項;三、linux入門(1) 一、基本命令復習    ls         查看文件內容  l查看文件詳細信息  -a顯示包含隱藏文…

    Linux干貨 2016-08-05
  • 學習宣言

    別人笑我太瘋癲,我笑他人看不穿。不見五陵豪杰墓,無花無酒鋤作田。

    Linux干貨 2016-10-24
欧美性久久久久