字符串处理

  • 变量替换
语法 说明
${变量名#匹配规则} 从变量 开头 进行规则匹配,将符合最 的数据删除
${变量名##匹配规则} 从变量 开头 进行规则匹配,将符合最 的数据删除
${变量名%匹配规则} 从变量 尾部 进行规则匹配,将符合最 的数据删除
${变量名%%匹配规则} 从变量 尾部 进行规则匹配,将符合最 的数据删除
${变量名/旧字符串/新字符串} 变量内容符合旧字符串,则 第一个 旧字符串会被新字符串替换
${变量名//旧字符串/新字符串} 变量内容符合旧字符串,则 所有 旧字符串会被新字符串替换
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
shell > A='I am 13.Haha 13.'
shell > echo $A
I am 13.Haha 13.
shell > echo ${A#13}
I am 13.Haha 13.
shell > echo ${A#13*}
I am 13.Haha 13.
shell > echo ${A##13*} #需要注意匹配规则
I am 13.Haha 13.
shell > echo ${A##*13}
.
shell > echo ${A#*13}
.Haha 13.
shell > echo ${A%*13}
I am 13.Haha 13.
shell > echo ${A%13*}
I am 13.Haha
shell > echo ${A%%13*}
I am
shell > echo ${A/13/zy}
I am zy.Haha 13.
shell > echo ${A//13/zy}
I am zy.Haha zy.
  • 计算字符串长度
    语法 说明
    方法一 ${ #string} 此处大括号后的空格是因为hexo博客原因添加,实际使用无需空格,具体见实例
    方法二 expr length “$string” str有空格,则必须加双引号
1
2
3
shell > A='i am 13'
shell > echo ${#A}
7
  • 获取子字符串在母字符串中的索引位置

expr index $string $substring

查找是通过将 $substring 拆分成多个独立的字母,分别在 $string 中进行查找。返还有结果的最小值

1
2
3
4
5
6
7
8
9
10
11
12
13
shell > A='i am 13'
shell > expr index "$A" am
3
shell > expr index "$A" 12a
3
shell > expr index "$A" a1m
3
shell > expr index "$A" m1a
3
shell > expr index "$A" m
4
shell > expr index "$A" m1a
3
  • 计算子串长度

expr match $string $substring

返回的是 匹配到的字串的长度, 不是该字符串本身。要想匹配成功字串, 这个字串必须是从头开始的, 子串从字符串首部开始才会匹配成功。如果不使用match要想匹配字串, 必须加冒号, 注意这个冒号是放在 字符串的外面的.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
shell > expr match "$A" 'i am'
4
shell > expr match "$A" 'i amasd'
0
shell > expr match "$A" i*
1
shell > expr match "$A" i.*
7
shell > expr match "$A" i.
2
shell > expr match "$A" i..
3
shell > expr "$A" : i
1
shell > expr "$A" : i.
2
  • 抽取子串
语法 说明
方法一 ${string:position} 从$string中第n位开始,从0计数
方法二 ${string:position:length} 从$string中第n位开始,长度为m
方法三 ${string: -position} 从右边开始匹配,负号前边有空格
方法四 ${string:(position)} 从左边开始匹配,可以是复数,没有空格
方法五 expr substr $string $position $length 如果字符串中有空格要用双引号将变量括起来。从1计数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
shell > expr index "$A" 'a'
3
shell > echo ${A:3}
m 13
shell > echo ${A:3:2}
m
shell > echo ${A:3:3}
m 1
shell > echo ${A: -1}
3
shell > echo ${A: (-1)}
3
shell > echo ${A:(-1)}
3
shell > echo ${A:(-4)}
m 13
shell > echo ${A:(0)}
i am 13
shell > echo ${A:(1)}
am 13
shell > expr substr "$A" 3 3
am
shell > expr substr $A 3 3
expr: syntax error