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匹配的子串