Shell脚本编程 | 字符串操作

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

猜你喜欢

转载自blog.csdn.net/liuyh73/article/details/88955288
今日推荐