shell中字串操作【轉】

weixin_33858249發表於2016-07-18

轉自:http://blog.chinaunix.net/uid-29091195-id-3974751.html

我們所遇到的程式語言中(彙編除外)都少不了字串處理函式吧,
當然shell程式設計也不例外咯,那麼下面我們一起來看下shell中字串
處理的相關操作吧。大概下面的字串操作可以分為兩種型別,一種
屬於變數替換,另一種屬於繼承unix expr命令吧!
  

  
1、測試字串長度

    ${#string}
    expr length $string
    expr "$string" : '.*'
    例:
        #!/bin/bash
        str="asfd"
        echo "${#str}"
        a=expr length $str
        echo "a=$a"
        a=0
        a=`expr "$str" : '.*'`
        echo "a=$a"

2、匹配字串開頭的子串長度
    expr match "$string" '$substring'
    $substring是一個正規表示式.
    expr "$string" : '$substring'
    $substring是一個正規表示式.
    例:
        #!/bin/bash
        str=abcABC123ABCabc
        echo `expr match "$str" 'abc[A-Z]*.2'`     # 8
        echo `expr "$str" : 'abc[A-Z]*.2'`          # 8

3、索引
    expr index $string $substring
    在字串$string中所匹配到的$substring第一次所出現的位置.
    例:
        #!/bin/bash
        str=abcABC123ABCabc
        echo `expr index "$str" C`     # 6     C 字元的位置.
        echo `expr index "$str" c`     # 3
        

4、提取子串
    ${string:position}
    在$string中從位置$position開始提取子串。
    如果$string是"*"或者"@", 那麼將會提取從位置$position開始的位置引數. [1]
    ${string:position:length}
    在$string中從位置$position開始提取$length長度的子串.
    例:
        #!/bin/bash
        str="abcABC123ABCabc"

        echo ${str:0}            #輸出abcABC123ABCabc
        echo ${str:3}            #輸出ABC123ABCabc 
        echo ${str:6:3}            #輸出123

5、子串削除
    ${string#substring}
    從$string的開頭位置截掉最短匹配的$substring.
    ${string##substring}
    從$string的開頭位置截掉最長匹配的$substring.
    例:
        #!/bin/bash
        str="abcABC123ABCabc"

        echo ${str#a*C}            #輸出123ABCabc
        echo ${str##a*C}        #輸出abc
        echo ${str##a*1}        #輸出23ABCabc
    
    ${string%substring}
    從$string的結尾位置截掉最短匹配的$substring.
    ${string%%substring}
    從$string的結尾位置截掉最長匹配的$substring.
    例:
        #!/bin/bash
        str=abcABC123ABCabc

        echo ${str%b*c}     #輸出 abcABC123ABCa        
        echo ${str%%b*c}     #輸出 a 

6、子串替換
    ${string/substring/replacement}
    使用$replacement來替換第一個匹配的$substring.
    ${string//substring/replacement}
    使用$replacement來替換所有匹配的$substring.
    ${string/%substring/replacement}
    如果$substring匹配$string的結尾部分, 那麼就用$replacement來替換$substring.
    ${string/#substring/replacement}
    如果$substring匹配$string的開頭部分, 那麼就用$replacement來替換$substring.
    例:
        #!/bin/bash
        str="abcABC123ABCabc"

        echo ${str/ABC/&&&}        #輸出 abc&&&123ABCabc
        echo ${str//ABC/&&&&}    #輸出 abc&&&&123&&&&abc
        echo ${str/%abc/&&&}    #輸出 abcABC123ABC&&&
        echo ${str/#abc/&&&}     #輸出 &&&ABC123ABCabc

 

【作者】張昺華
【新浪微博】 張昺華--sky
【twitter】 @sky2030_
【facebook】 張昺華 zhangbinghua
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利.

相關文章