Linux之字符串截取


獲取字符串的長度

在 Shell 中獲取字符串長度很簡單,具體方法如下:

${#string_name}

string_name 表示字符串名字。

root@master:~# b="ma name is yjt"
root@master:~# echo ${#b}
14

字符串截取

shell 截取字符串通常有兩種方式:從指定位置開始截取和從指定字符(子字符串)開始截取

從指定位置開始截取

從字符串左邊開始計數:

如果想從字符串的左邊開始計數,那么截取字符串的具體格式如下:

${string: start :length}

其中,string 是要截取的字符串,start 是起始位置(從左邊開始,從 0 開始計數),length 是要截取的長度(省略的話表示直到字符串的末尾)。

示例:

root@master:~# echo ${b:3:4}
name
root@master:~# echo ${b:3}
name is yjt

從字符串右邊開始計數:

如果想從字符串的右邊開始計數,那么截取字符串的具體格式如下:

${string: 0-start :length}

同第 1) 種格式相比,第 2) 種格式僅僅多了0-,這是固定的寫法,專門用來表示從字符串右邊開始計數。

這里需要強調兩點:

  • 從左邊開始計數時,起始數字是 0(這符合程序員思維);從右邊開始計數時,起始數字是 1(這符合常人思維)。計數方向不同,起始數字也不同。
  • 不管從哪邊開始計數,截取方向都是從左到右。

示例:

root@master:~# echo ${b:0-11:4}
name
root@master:~# echo ${b:0-11}
name is yjt

從指定字符或者子字符開始截取

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

使用 # 號截取右邊字符

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

${string#*chars}

其中,string 表示要截取的字符,chars 是指定的字符(或者子字符串),*是通配符的一種,表示任意長度的字符串。*chars連起來使用的意思是:忽略左邊的所有字符,直到遇見 chars(chars 不會被截取)。

root@master:~# url="http://www.baidu.com/tomcat"
root@master:~# echo ${url#*:}
//www.baidu.com/tomcat

這個url里面有三個/,匹配/結果如下:

root@master:~# echo ${url#*/}
/www.baidu.com/tomcat

如果想要獲取tomcat或者說匹配最后一個/呢?

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

${string##*chars}

root@master:~# echo ${url##*/}
tomcat

使用 % 截取左邊字符

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

${string%chars*}

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

root@master:~# echo ${url%/*}    //從最右邊的/開始匹配。
http://www.baidu.com
root@master:~# echo ${url%%/*}
http:

 


免責聲明!

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



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