我们所遇到的编程语言中(汇编除外)都少不了字符串处理函数吧,

当然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