歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> shell字符串處理

shell字符串處理

日期:2017/3/1 10:09:58   编辑:SHELL編程

字符串長度

  1. shell>echo ${#string}
  2. shell>expr length $string
  3. shell>expr "$string" : '.*'

匹配字符串開頭的子串長度

  1. expr match "$string" '$substring'
  2. $substring 是一個正則表達式.
  3. expr "$string" : '$substring'

索引

  1. expr index $string $substring

提取子串

  1. ${string:position}
  2. 在$string 中從位置$position開始提取子串.
  3. 如果$string 是"*"或者" @ ", 那麼將會提取從位置$position開始的位置參數. [1]
  4. ${string:position:length}
  5. 在$string 中從位置$position開始提取$length 長度的子串.
  1. stringZ=abcABC123ABCabc
  2. # 0123456789.....
  3. # 0-based indexing.
  4. echo ${stringZ:0} # abcABC123ABCabc
  5. echo ${stringZ:1} # bcABC123ABCabc
  6. echo ${stringZ:7} # 23ABCabc
  7. echo ${stringZ:7:3} # 23A
  8. # 提取子串長度為3.
  9. # 能不能從字符串的右邊(也就是結尾)部分開始提取子串?
  10. echo ${stringZ:-4} # abcABC123ABCabc
  11. # 默認是提取整個字符串, 就象${parameter:-default} 一樣.
  12. # 然而 . . .
  13. echo ${stringZ:(-4)} # Cabc
  14. echo ${stringZ: -4} # Cabc 注意,":"右邊有一個空格!
  15. # 這樣, 它就可以工作了.
  16. # 使用圓括號或者添加一個空格可以"轉義"這個位置參數.
如果$string 參數是"*"或" @ ", 那麼將會從$position位置開始提取 $length 個位置參數, 但是由於
可能沒有$length 個位置參數了, 那麼就有幾個位置參數就提取幾個位置參數.
  1. echo ${*:2} # 打印出第2個和後邊所有的位置參數.
  2. echo ${@:2} # 同上.
  3. echo ${*:2:3} # 從第2個開始, 連續打印3個位置參數.
expr substr $string $position $length
在$string 中從$position開始提取$length 長度的子串.
  1. echo `expr substr $stringZ 1 2`
  2. echo `expr substr $stringZ 4 3`

expr match "$string" '\($substring\)'
從$string 的開始位置提取$substring , $substring 是正則表達式.
expr "$string" : '\($substring\)'
從$string 的開始位置提取$substring , $substring 是正則表達式.

  1. stringZ=abcABC123ABCabc
  2. # =======
  3. echo `expr match "$stringZ" '\(.[b-c]*[A-Z]..[0-9]\)'`
  4. echo `expr "$stringZ" : '\(.[b-c]*[A-Z]..[0-9]\)'`
  5. echo `expr "$stringZ" : '\(.......\)'`
  6. # 上邊的每個echo 都打印出相同的結果. abcABC1
expr match "$string" '.*\($substring\)'
從$string 的結尾提取$substring , $substring 是正則表達式.
expr "$string" : '.*\($substring\)'
從$string 的結尾提取$substring , $substring 是正則表達式.
  1. expr match "$stringZ" '.*\([A-C][A-C][A-C][a-c]*\)'
  2. ABCabc
  3. expr "$stringZ" : '.*\(......\)'
  4. ABCabc

子串削除

  1. ${string#substring}
  2. 從$string 的開頭位置截掉最短匹配的$substring .
  3. ${string##substring}
  4. 從$string 的開頭位置截掉最長匹配的$substring .
  5. ${string%substring}
  6. 從$string 的結尾位置截掉最短匹配的$substring .
  7. ${string%%substring}
  8. 從$string 的結尾位置截掉最長匹配的$substring .
  9. echo ${stringZ%b*c} # abcABC123ABCa
  10. # 從$stringZ 的結尾位置截掉'b' 到'c' 之間最短的匹配.
  11. echo ${stringZ%%b*c} #a
  12. # 從$stringZ 的結尾位置截掉'b' 到'c' 之間最長的匹配.
當你需要構造文件名的時候, 這個操作就顯得特別有用.

子串替換

  1. ${string/substring/replacement}
  2. 使用$replacement 來替換第一個匹配的$substring .
  3. ${string//substring/replacement}
  4. 使用$replacement 來替換所有匹配的$substring .
  5. ${string/#substring/replacement}
  6. 如果$substring 匹配$string 的開頭部分, 那麼就用$replacement 來替換$substring .
  7. ${string/%substring/replacement}
  8. 如果$substring 匹配$string 的結尾部分, 那麼就用$replacement 來替換$substring
[從書本上摘錄下來,對於字符串的處理,熟練運用了Bash提供的這些操作,一般的應用還是都能處理好]
Copyright © Linux教程網 All Rights Reserved