如果双重条件匹配,如何替换字符串

时间:2016-02-11 02:23:13

标签: sed

如果该行包含bbb,则有一个命令可将ccc替换为abc

echo "abc yyy bbb xzy" | sed -e "/abc/ s/bbb/ccc/"

如果我想要替换,只有当行包含abcxyz时,是否有人知道该命令是什么?

2 个答案:

答案 0 :(得分:2)

因为首先匹配哪一个并不重要,您可以首先查找abc,然后在xyz匹配 1 的情况下进行替换:< / p>

sed '/abc/{/xyz/s/bbb/ccc/}'

或者,不那么优雅:

sed '/abc.*xyz\|xyz.*abc/s/bbb/ccc/'

但没有嵌套。

1 BSD sed在结束括号前需要一个分号。

答案 1 :(得分:0)

只需使用awk,您可以在编写时对其进行编码,并在条件之间加&&

awk '/abc/ && /xyz/ { sub(/bbb/,"ccc") } 1'

尝试写作:

awk '(/abc/ && /xyz/) || (/def/ && (/ghi/ || /klm/)) { sub(/bbb/,"ccc") } 1'

或任何其他更有趣的复合条件与sed。 awk随处可用,上面是完全可移植的,并且可以在每个UNIX安装的每个awk中按原样运行。