shell字符串操作方法,以及實例

每一種語言都有他獨自的字符串操作方法,shell也一樣,下面以以例子的方式,簡單介紹常用方法。

1,取得字符串長度

1. string=abc12342341          //等號二邊不要有空格  

2. echo ${#string}             //結果11  

3. expr length $string         //結果11  

4. expr "$string" : ".*"       //結果11 分號二邊要有空格,這裏的:match的用法差不多  

2,字符串所在位置

1. expr index $string '123'    //結果字符串對應的下標是從0開始的  

這個方法讓我想起來了js的indexOf,各種語言對字符串的操作方法大方向都差不多,如果有語言基礎的話,學習shell會很快的。

3,從字符串開頭到子串的最大長度

1. expr match $string 'abc.*3' //結果9  

個人覺得這個函數的用處不大,爲什麼要從開頭開始呢。

4,字符串截取

1. echo ${string:4}      //2342341  從第4位開始截取後面所有字符串  

2. echo ${string:3:3}    //123      從第3位開始截取後面3  

3. echo ${string:3:6}    //123423   從第3位開始截取後面6  

4. echo ${string: -4}    //2341  :右邊有空格   截取後4  

5. echo ${string:(-4)}   //2341  同上  

6. expr substr $string 3 3   //123  從第3位開始截取後面3  

上面的方法讓我想起了,php的substr函數,後面截取的規則是一樣的。

5,匹配顯示內容

1. //3中也有match和這裏的match不同,上面顯示的是匹配字符的長度,而下面的是匹配的內容  

2. expr match $string '\([a-c]*[0-9]*\)'  //abc12342341  

3. expr $string : '\([a-c]*[0-9]\)'       //abc1  

4. expr $string : '.*\([0-9][0-9][0-9]\)' //341 顯示括號中匹配的內容  

這裏括號的用法,是不是根其他的括號用法有相似之處呢,

6,截取不匹配的內容

1. echo ${string#a*3}     //42341  $string左邊開始,去掉最短匹配子串  

2. echo ${string#c*3}     //abc12342341  這樣什麼也沒有匹配到  

3. echo ${string#*c1*3}   //42341  $string左邊開始,去掉最短匹配子串  

4. echo ${string##a*3}    //41     $string左邊開始,去掉最長匹配子串  

5. echo ${string%3*1}     //abc12342  $string右邊開始,去掉最短匹配子串  

6. echo ${string%%3*1}    //abc12     $string右邊開始,去掉最長匹配子串  

這裏要注意,必須從字符串的第一個字符開始,或者從最後一個開始,

7,匹配並且替換

1. echo ${string/23/bb}   //abc1bb42341  替換一次  

2. echo ${string//23/bb}  //abc1bb4bb41  雙斜槓替換所有匹配  

3. echo ${string/#abc/bb} //bb12342341   #以什麼開頭來匹配,根php中的^有點像  

4. echo ${string/%41/bb}  //abc123423bb  %以什麼結尾來匹配,根php中的$有點像  


轉自:http://blog.51yip.com/shell/1080.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章