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
分情況進行討論:
-
substring中的任何字符,返回0
$ expr index "hello" "889"
0
-
substring中的所有字符,返回首字符位置
$ expr index "hello" "he"
1
-
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匹配的子串