操作字符串
Bash所支持的字符串操作的数量多的令人惊讶. 但是缺乏统一的标准.
一些是参数替换的子集,
另外一些则受到UNIX expr命令的影响. 这就导致了命令语法的不一致, 还会引起冗余的功能, 但是这些并没有引起混乱.
1.字符串长度表示方法:
【格式1】${#string}
【格式2】expr length $string
【格式3】expr "$string" : '.*'
2.匹配字符串开头的子串长度
【格式1】expr match "$string" '$substring' #$substring是一个正则表达式.
【格式2】expr "$string" : '$substring' #$substring是一个正则表达式.
【示例】
stringZ=abcABC123ABCabc
echo `expr match "$stringZ" 'abc[A-Z]*.2'` # 8
echo `expr "$stringZ" : 'abc[A-Z]*.2'` # 8
3.索引
【格式1】expr index $string $substring
#在字符串$string中所匹配到的$substring第一次所出现的位置.
【示例】
stringZ=abcABC123ABCabc
echo `expr index "$stringZ" C12` # 6 # C 字符的位置.
4.提取子串
【格式1】${string:position} #在$string中从位置$position开始提取子串.
#如果$string是"*"或者"@", 那么将会提取从位置$position开始的位置参数. [1]
【格式2】${string:position:length}#在$string中从位置$position开始提取$length长度的子串.
【示例】
stringZ=abcABC123ABCabc
echo ${stringZ:0} # abcABC123ABCabc
echo ${stringZ:1} # bcABC123ABCabc
echo ${stringZ:7} # 23ABCabc
echo ${stringZ:7:3} # 23A
# 提取子串长度为3.
# 能不能从字符串的右边(也就是结尾)部分开始提取子串?
echo ${stringZ:(-4)} # Cabc
echo ${stringZ: -4} # Cabc
# 这样, 它就可以工作了.
# 使用圆括号或者添加一个空格可以"转义"这个位置参数.
4.1正则表达式与提取
【格式】expr match "$string" '\($substring\)'
从$string的开始位置提取$substring, $substring是正则表达式.
【格式】expr "$string" : '\($substring\)'
从$string的开始位置提取$substring, $substring是正则表达式.
echo `expr match "$stringZ" '\(.[b-c]*[A-Z]..[0-9]\)'` # abcABC1
【格式】expr match "$string" '.*\($substring\)'
从$string的结尾提取$substring, $substring是正则表达式.
【格式】expr "$string" : '.*\($substring\)'
从$string的结尾提取$substring, $substring是正则表达式.
5.子串削除
【格式1】${string#substring}
从$string的开头位置截掉最短匹配的$substring.
【格式2】${string##substring}
从$string的开头位置截掉最长匹配的$substring.
【示例】
echo ${stringZ#a*C} # 123ABCabc
# 截掉'a'到'C'之间最短的匹配字符串.
echo ${stringZ##a*C} # abc
# 截掉'a'到'C'之间最长的匹配字符串.
【格式3】${string%substring}
从$string的结尾位置截掉最短匹配的$substring.
【格式4】${string%%substring}
从$string的结尾位置截掉最长匹配的$substring.
6.子串替换
【格式1】${string/substring/replacement}
使用$replacement来替换第一个匹配的$substring.
【格式2】${string//substring/replacement}
使用$replacement来替换所有匹配的$substring.
【格式3】${string/#substring/replacement}
如果$substring匹配$string的开头部分, 那么就用$replacement来替换$substring.
【格式4】${string/%substring/replacement}
如果$substring匹配$string的结尾部分, 那么就用$replacement来替换$substring.
7.使用awk来处理字符串
Bash脚本也可以调用awk的字符串操作功能来代替它自己内建的字符串操作.
【示例】提取字符串的另一种方法
1 #!/bin/bash
2 # substring-extraction.sh
3
4 String=23skidoo1
5 # 012345678 Bash
6 # 123456789 awk
7 # 注意不同的字符串索引系统:
8 # Bash的第一个字符是从'0'开始记录的.
9 # Awk的第一个字符是从'1'开始记录的.
10
11 echo ${String:2:4} # 位置 3 (0-1-2), 4 个字符长
12 # skid
13
14 # awk中等价于${string:pos:length}的命令是substr(string,pos,length).
15 echo | awk '
16 { print substr("'"${String}"'",3,4) # skid
17 }
18 '
19 # 使用一个空的"echo"通过管道传递给awk一个假的输入,
20 #+ 这样就不必提供一个文件名给awk.
21
22 exit 0
阅读(504) | 评论(0) | 转发(0) |