删除包含两个字符串的行

Delete lines that contain two strings

我正在尝试使用 sed 删除文本文件中的一些行。我只想删除包含两个字符串的行。命令 \| 等同于布尔值 OR。布尔运算符 AND 的命令是什么?

我正在寻找这样的东西:

sed '/strA'AND'strB/d' file.txt

您可以使用相同的 \| OR (alternation) 运算符。下面的 sed 命令将删除所有同时具有 strAstrB 的行,而不管顺序如何。

sed '/strA.*strB\|strB.*strA/d' file.txt

如果你想删除 strA 总是出现在 strB 之前的行,那么你可以使用这个。

sed '/strA.*strB/d' file.txt
sed '/strA/{
        /strB/ d
        }' YourFile
  • AND 是一个子过滤器(如果过滤 strA,则在 strB 上过滤相同的内容)
  • 顺序本身对于过滤并不重要,但可能会根据每个模式的出现而改变性能)

您不能将两个选择器放在一个命令上,但您可以将一个命令放在大括号之间并执行此操作:

sed '/strA/{/strB/d}' file.txt

其中不好的部分是,如果您要测试很多字符串,则可能有很多 {} 需要处理。而且,它可能不是很有效。

这可能对你有用 (GNU sed):

sed '/strA/!b;/strB/d' file

如果行中不包含strA bail out。如果有并且它还包含 strB 删除它。