首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

操作字符串下令(提取,消除,替换)

2012-09-18 
操作字符串命令(提取,消除,替换)1.expr提取格式:expr match $string $substring$substring 是一个正则

操作字符串命令(提取,消除,替换)

1.expr提取

格式:
expr match "$string" '$substring'
$substring 是一个正则表达式

expr "$string" : '$substring'
$substring 是一个正则表达式


从字符串开始的位置匹配字符串的长度,也即是算出这些匹配的字符串长度

写了个脚本测试
stringZ=abcABC123ABCabc
echo `expr match "$stringZ" 'abc[A-Z]*.2'`
echo `expr "$stringZ" : 'abc[A-Z]*.2'`

输出
操作字符串下令(提取,消除,替换)
?* 的意思是匹配0或多个正好在它之前的那个字符。例如正则表达式.*意味着能够匹配任意数量的任何字符。
如9*,那可以为空格或9、99、999,因为*可以匹配0次

思考下以下出来的结果是多少
abc[A-Z]*.1
abc[A-Z]*..3


2.提取

${string:position:length}
在 string 中从位置$position 开始提取$length 长度的子串
写了个脚本测试
#!/bin/bash
stringZ=abcABC123ABCabc
echo ${stringZ:0}
echo ${stringZ:1}
echo ${stringZ:7}
echo ${stringZ:7:3}

操作字符串下令(提取,消除,替换)


3.子串削除

从左边削除
${string#substring}
从$string 的左边截掉第一个匹配的$substring
${string##substring}
从$string 的左边截掉最后一个个匹配的$substring


脚本测试
#!/bin/bash
stringZ=abcABC123ABCabc
echo "${stringZ#a*C}"
echo "${stringZ##a*C}"
输出
[root@ahaogege haha]# ./9.11.sh
123ABCabc
abc

"${stringZ#a*C}"
截掉'a'和'C'之间最近的匹配.
"${stringZ##a*C}"
截掉'a'和'C'之间最远的匹配


4.从右边削除(#左边,%右边)
#号变成了%号
${string%substring}
从$string 的右边截掉第一个匹配的$substring
${string%%substring}
从$string 的右边截掉最后一个匹配的$substring


#!/bin/bash
stringZ=abcABC123ABCabc
echo "${stringZ%b*c}"
echo "${stringZ%%b*c}"

[root@ahaogege haha]# ./9.11.sh
abcABC123ABCa
a


5.子串替换

${string/substring/replacement}
使用$replacement 来替换第一个匹配的$substring.
${string//substring/replacement}
使用$replacement 来替换所有匹配的$substring.

[root@ahaogege haha]# more 9.11.sh
#!/bin/bash
stringZ=abcABC123ABCabc
echo "${stringZ/abc/xyz}"
echo "${stringZ//abc/xyz}"


[root@ahaogege haha]# ./9.11.sh
xyzABC123ABCabc
xyzABC123ABCxyz

6.子串替换
"${stringZ/abc/xyz}" 用'xyz'来替换第一个匹配的'abc'.
"${stringZ//abc/xyz}" 用'xyz'来替换所有匹配的'abc'.


${string/#substring/replacement}
如果$substring 匹配$string 的开头部分,那么就用$replacement 来替换$substring.
${string/%substring/replacement}
如果$substring 匹配$string 的结尾部分,那么就用$replacement 来替换$substring.

#!/bin/bash
stringZ=abcABC123ABCabc
echo "${stringZ/#abc/xyz}"?????? 用'XYZ'替换开头的'abc'
echo "${stringZ/%abc/xyz}"????? 用'XYZ'替换结尾的'abc'

结果
[root@ahaogege haha]# ./9.11.sh
xyzABC123ABCabc
abcABC123ABCxyz

热点排行