如果该行包含bbb
,则有一个命令可将ccc
替换为abc
。
echo "abc yyy bbb xzy" | sed -e "/abc/ s/bbb/ccc/"
如果我想要替换,只有当行包含abc
和xyz
时,是否有人知道该命令是什么?
答案 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中按原样运行。