转自:http://blog.chinaunix.net/uid-29091195-id-3974751.html
我们所遇到的编程语言中(汇编除外)都少不了字符串处理函数吧,
当然shell编程也不例外咯,那么下面我们一起来看下shell中字符串
处理的相关操作吧。大概下面的字符串操作可以分为两种类型,一种
属于变量替换,另一种属于继承unix expr命令吧!
1、测试字符串长度 ${#string} expr length $string expr "$string" : '.*' 例: #!/bin/bash str="asfd" echo "${#str}" a=expr length $str echo "a=$a" a=0 a=`expr "$str" : '.*'` echo "a=$a" 2、匹配字符串开头的子串长度 expr match "$string" '$substring' $substring是一个正则表达式. expr "$string" : '$substring' $substring是一个正则表达式. 例: #!/bin/bash str=abcABC123ABCabc echo `expr match "$str" 'abc[A-Z]*.2'` # 8 echo `expr "$str" : 'abc[A-Z]*.2'` # 8 3、索引 expr index $string $substring 在字符串$string中所匹配到的$substring第一次所出现的位置. 例: #!/bin/bash str=abcABC123ABCabc echo `expr index "$str" C` # 6 C 字符的位置. echo `expr index "$str" c` # 3 4、提取子串 ${string:position} 在$string中从位置$position开始提取子串。 如果$string是"*"或者"@", 那么将会提取从位置$position开始的位置参数. [1] ${string:position:length} 在$string中从位置$position开始提取$length长度的子串. 例: #!/bin/bash str="abcABC123ABCabc" echo ${str:0} #输出abcABC123ABCabc echo ${str:3} #输出ABC123ABCabc echo ${str:6:3} #输出123 5、子串削除 ${string#substring} 从$string的开头位置截掉最短匹配的$substring. ${string##substring} 从$string的开头位置截掉最长匹配的$substring. 例: #!/bin/bash str="abcABC123ABCabc" echo ${str#a*C} #输出123ABCabc echo ${str##a*C} #输出abc echo ${str##a*1} #输出23ABCabc ${string%substring} 从$string的结尾位置截掉最短匹配的$substring. ${string%%substring} 从$string的结尾位置截掉最长匹配的$substring. 例: #!/bin/bash str=abcABC123ABCabc echo ${str%b*c} #输出 abcABC123ABCa echo ${str%%b*c} #输出 a 6、子串替换 ${string/substring/replacement} 使用$replacement来替换第一个匹配的$substring. ${string//substring/replacement} 使用$replacement来替换所有匹配的$substring. ${string/%substring/replacement} 如果$substring匹配$string的结尾部分, 那么就用$replacement来替换$substring. ${string/#substring/replacement} 如果$substring匹配$string的开头部分, 那么就用$replacement来替换$substring. 例: #!/bin/bash str="abcABC123ABCabc" echo ${str/ABC/&&&} #输出 abc&&&123ABCabc echo ${str//ABC/&&&&} #输出 abc&&&&123&&&&abc echo ${str/%abc/&&&} #输出 abcABC123ABC&&& echo ${str/#abc/&&&} #输出 &&&ABC123ABCabc
【作者】张昺华
【新浪微博】 张昺华--sky
【twitter】 @sky2030_
【facebook】 张昺华 zhangbinghua
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.