Shell字符串截取


1、從指定位置開始截取

這種方式需要兩個參數: 1.起始位置 2.截取長度
既然需要指定起始位置,那么就涉及到計數方向的問題,到底是從字符串左邊開始計數,還是從字符串右邊開始計數,答案是shell同時支持兩種計數方式

1.1 從字符串左邊開始計數

從左邊開始計數,截取字符串的格式如下
${string:start:length}
其中,string為要截取的字符串,start是起始位置(從左邊開始,從0開始計數),length是要截取的長度(省略的話表示直到字符串的末尾)
例如:

#! /bin/bash
url="http://www.baidu.com"
echo ${url:5:11}

結果為//www.baidu

再如:

#! /bin/bash
url="http://www.baidu.com"
echo ${url:5}  #省略length,截取到字符串末尾

 

2.1 從右邊開始計數

從右邊開始計數,截取字符串的格式如下
${string:0-start:length}
同從左邊開始計數相比,這種格式僅僅多了0-,這是固定的寫法,專門用來標識從字符串右邊開始計數

需要注意下面兩點:

  • 從左邊開始計數時,起始數字是0;從右邊開始計數時,起始數字是1
  • 不管從哪邊計數,截取方向都是從左到右

例如:

#! /bin/bash
url="http://www.baidu.com"
echo ${url:0-9:5}

結果為baidu。從右邊數,b是第9個字符

再如:

#! /bin/bash
url="http://www.baidu.com"
echo ${url:0-9}  #省略length,直接截取到字符串末尾

 

結果為baidu.com

 

2、從指定字符(子字符串)開始截取

這種截取方式無法指定字符串長度,只能從指定字符(子字符串)截取到字符串末尾。Shell 可以截取指定字符(子字符串)右邊的所有字符,也可以截取左邊的所有字符。

2.1使用#號截取右邊字符

使用#號可以截取指定字符(子字符串)右邊的所有字符,具體格式如下:
${string#*chars}
其中,string表示要截取的字符串,chars是指定的字符(或子字符串),*是通配符,表示任意長度的字符串,*chars連起來可理解為忽略左邊的所有字符,直到遇到chars(chars不會被截取)
例如:

#! /bin/bash
url="http://www.baidu.com"
echo ${url#*://}

結果為www.baidu.com

如果不需要忽略chars左邊的字符,那么也可以不寫*,例如

#! /bin/bash
url="http://www.baidu.com"
echo ${url#http://}

結果為www.baidu.com

注意:以上寫法遇到第一個匹配的字符(子字符串)就結束了。
例如

#! /bin/bash
url="http://www.baidu.com/index.html"
echo ${url#*/}

結果為/www.baidu.com/index.html。url字符串中有三個/,輸出結果表明,Shell遇到第一個/就匹配結束了

如果希望直到最后一個指定字符(子字符串)再匹配結束,那么可以使用##,具體格式為:
${string##*chars}

例如:

#! /bin/bash
url="http://www.baidu.com/index.html"
echo ${url#*/}   #結果為/www.baidu.com/index.html
echo ${url##*/}   #結果為index.html

str="---aa+++aa@@@"
echo ${str#*aa}   #結果為+++aa@@@
echo ${str##*aa}  #結果為@@@

 

2.2使用%截取左邊字符

使用%號可以截取指定字符(或者子字符串)左邊的所有字符,具體格式如下:

${string%chars*}

請注意*的位置,因為要截取chars左邊的字符,而忽略chars右邊的字符串,所以*應該位於chars右側,其他方面 %和 #號的用法相同,這里不再贅述,僅舉例說明

#! /bin/bash
url="http://www.baidu.com/index.html"
echo ${url%/*}   #結果為http://www.baidu.com
echo ${url%%/*}  #結果為http:

str="---aa+++aa@@@"
echo ${str%aa*}  #結果為---aa+++
echo ${str%%aa*}  #結果為---

 

 

參考地址 http://c.biancheng.net/view/1120.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM