expr命令
expr引出通用求值表达式,可以实现算术操作、比较操作、字符串操作和逻辑操作等功能。
length
返回字符串长度
$ expr length “hello, shell”
12
index
expr index str sub
返回sub中字符在str中第一次出现的位置
$ expr index “hello, shell” “sh”
1
【注意】s在第8个字符出现,但是h在第1个字符出现
match
expr match $str $sub
,返回在str开头匹配到的sub的长度
$ expr match “hello, shell” “he.*o”
5
$ expr index “hello, shell” “shell”
0
substr
expr substr $str offset length
,返回str中从第offset个字符(下表从1开始,包含该字符)开始,长度为length的字符串
expr substr “hello, shell” 3 6
llo, s
字符串大小写转换
表达式 | 含义 |
---|---|
${str^^} | 将所有字母大写 |
${str,} | 将所有字母小写 |
【举例说明】
str="Hello, SHELL!"
echo ${str^^}
echo ${str,,}
# 输出结果
HELLO, SHELL!
hello, shell!
字符串切片
表达式 | 含义(下标从0开始) |
---|---|
${#str} | 返回字符串str的长度 |
${str:offset} | 返回字符串str从第offset个字符(不包含该字符)后面的字符 |
${str:offset:length} | 返回字符串str从第offset个字符(不包含该字符)后面length个字符 |
${str: -offset} | 返回字符串str末尾offset个字符 |
${str:offset:-length | 返回字符串str从第offset个字符(不包含该字符)开始,到距离末尾length个字符之间的字符 |
${str: -offset:-length} | 从距离末尾offset个字符(包含该字符)开始,到距离末尾length个字符之间的字符 |
【注意】在str:
后面用到-
符号的,都需要在:
与-
之间增加一个空格。
【举例说明】
str="hello, shell!"
offset=1
length=5
echo ${#str}
echo ${str:offset}
echo ${str:offset:length}
echo ${str: -offset}
echo ${str:offset:-length}
echo ${str: -offset:-length}
# 输出结果
13
ello, shell!
ello,
hell!
ello, s
hell
字符串匹配截取
表达式 | 含义 |
---|---|
${str#*sub} | 从str的开头,向后删除字符,直到找到第一次匹配sub的子串 |
${str##*sub} | 从str的开头,向后删除字符,直到找到最后一次匹配sub的子串 |
${str%sub* | 从str的末尾,向前删除字符,直到找到第一次匹配sub的子串 |
${str%%sub* | 从str的末尾,向前删除字符,直到找到最后一次匹配sub的子串 |
【举例说明】
str="2019-04-01/12:00:09"
echo ${str#*:}
echo ${str##*:}
echo ${str%-*}
echo ${str%%-*}
# 输出结果
00:09
09
2019-04
2019
字符串替换、删除
字符串替换
表达式 | 含义 |
---|---|
${str/pattern/sub} | 查找str中第一次被pattern匹配到的字符串,以sub替换 |
${str//pattern/sub} | 查找str中所有被pattern匹配到的字符串,以sub替换 |
${str/#pattern/sub} | 查找str中开头被pattern匹配到的字符串,以sub替换 |
${str/%pattern/sub} | 查找str中末尾被pattern匹配到的字符串,以sub替换 |
【注意】第三四条规则只有开头和末尾完全匹配时才会替换。
【举例说明】
str="2019-04-01 12:00:09"
echo ${str/-/\\}
echo ${str//-/\\}
echo ${str/#2019/2018}
echo ${str/%09/00}
# 输出结果
2019\04-01 12:00:09
2019\04\01 12:00:09
2018-04-01 12:00:09
2019-04-01 12:00:00
字符串删除
表达式 | 含义 |
---|---|
${str/pattern} | 删除str中第一次被pattern匹配到的子串 |
${str//pattern} | 删除str中所有被pattern匹配到的子串 |
${var/#pattern} | 删除str中匹配pattern的行首 |
${var/%pattern} | 删除str中匹配pattern的行尾 |
【举例说明】
str="2019-01-01 12:02:22"
echo ${str/-01}
echo ${str//-01}
echo ${str/#2019}
echo ${str/%2}
# 输出结果
2019-01 12:02:22
2019 12:02:22
-01-01 12:02:22
2019-01-01 12:02:2