操作字符串命令(提取,消除,替换),字符串命令
操作字符串命令(提取,消除,替换),字符串命令
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
相关文章
- 暂无相关文章
用户点评