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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值