SHELL字符串提取的兩種方法實現
Shell 截取字符串通常有兩種方式:從指定位置開始截取和從指定字符(子字符串)開始截取。
一、從指定位置開始截取,Shell 同時支持從左和從右兩種計數方式
1.從字符串左邊開始計數
此方法需要提供位置參數和長度參數,如${string:start:length},string 是要截取的字符串,start 是起始位置(省略的話表示從0開始),length 是要截取的長度(省略的話表示直到字符串的末尾)。
2.從字符串右邊開始計數
從字符串的右邊開始計數,那么截取字符串的具體格式如下:${string:0-start:length},位置參數是0-start ,這是固定寫法。需要注意的是,不管從左邊還是從右邊開始計數,截取方向都是從左到右。
上圖第三種輸出其實屬于第一種情況,表示從頭截取到(保留后三位)
二、從指定字符(子字符串)開始截取
這種截取方式無法指定字符串長度,只能從指定字符(子字符串)截取到字符串末尾。Shell 可以截取指定字符(子字符串)右邊的所有字符,也可以截取左邊的所有字符。
1. 使用 # 號截取右邊字符
使用#
號可以截取指定字符(或者子字符串)右邊的所有字符,具體格式如:${string#*chars} ,其中,string 表示要截取的字符,chars 是指定的字符(或者子字符串),*
是通配符的一種,表示任意長度的字符串。*chars
連起來使用的意思是:忽略左邊的所有字符,直到遇見 chars(chars 不會被截?。?。
很容易發(fā)現,如果不用*匹配,可以將字符串寫全。如果字符串中有多個相同的子串,那么匹配到第一個子串就結束了。如果希望直到最后一個指定字符(子字符串)再匹配結束,那么可以使用##
,具體格式為:${string##*chars}
2. 使用 % 截取左邊字符
使用%
號可以截取指定字符左邊的所有字符(子字符串),具體格式如下:${string%chars*}
請注意*
的位置,因為要截取 chars 左邊的字符,而忽略 chars 右邊的字符,所以*
應該位于 chars 的右側。
同樣的 如果字符串中有多個相同的子串,那么匹配到第一個子串就結束了。如果希望直到最后一個指定字符(子字符串)再匹配結束,那么可以使用##
,具體格式為:${string%%*chars}
熟練掌握這幾種對字符串的操作,一定會使你的shell更加精簡高效。
到此這篇關于SHELL字符串提取的兩種方法實現的文章就介紹到這了,更多相關SHELL字符串提取內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
shell字符串截取報錯:Bad substitution的解決
這篇文章主要介紹了shell字符串截取報錯:Bad substitution的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-10-10