六.Shell之字符串高級用法(expr)

Shell中對字符串處理命令主要有兩種,一種爲前面Shell三劍客之一的awk,另一種爲即將介紹的expr

  • 1. ${#...}expr length (計算長度)

格式:

${#string}
#或
expr length $string

注意使用expr length 時,如果$string中有空格需要使用雙引號括起來。

Demo:

$ expr length "hello world"
11
$ str="hello world"
$ expr length $str
expr: syntax error: unexpected argument “world”
$ expr length "$str"
11
$ echo ${#str}
11
  • 2. expr index (索引)

索引並不是完全匹配
格式:

expr index $string $substring

分情況進行討論:

  • string中匹配不到substring中的任何字符,返回0
$ expr index "hello" "889"
0
  • string中能匹配到substring中的所有字符,返回首字符位置
$ expr index "hello" "he"
1
  • substring的部分字符被string所擁有,返回最靠前的字符位置
1
$ expr index "hello" "oh"
1
  • 3. expr match (匹配)

匹配成功返回substring的長度,匹配不成功返回0,可以使用正則表達式(不是通配符)
格式:

expr match $string $substring

分情況進行討論:

  • 匹配整個字符串
$ expr match "hello world" ".*w.*"
11
  • 匹配到string開頭,但並不完全匹配
$ expr match "hello world" "hell"
4
  • 不完全匹配且並未出現在開頭
$ expr match "hello world" "world"
0
  • 4. 獲取子串

格式:

${string:position}
${string:position:length}
expr substr $string $position $length

注意字符串位置從0開始
position可以使用負數,表示倒數
expr substr 中length必不可少

Demo:

$ str="1234qwer"
$ echo ${str:1}
234qwer
$ echo ${str:0}
1234qwer
$ echo ${str:1:4}
234q
  • 5. 刪除子串

格式:

${string#substring}

刪除在開頭匹配的最短子串

${string##substring}

刪除在開頭匹配的最長子串

${string%substring}

刪除在結尾匹配的最短子串

${string%%substring}

刪除在結尾匹配的最長子串

  • 6. 替換子串

格式:

${string/substring/replacement}

僅替換第一次與substring匹配的子串

${string//substring/replacement}

替換所有的與substring匹配的子串

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