删除包含两个字符串的行

时间:2015-02-17 12:29:14

标签: file sed

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

我正在寻找类似的东西:

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

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

您可以使用相同的\| OR(交替)运算符。以下sed命令将删除同时具有strAstrB的所有行,无论顺序如何。

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

如果您要删除strA之前总是strB之前的行,那么您可以使用此行。

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

答案 2 :(得分:1)

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

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

不好的部分是,如果你想要测试很多字符串,你可能需要处理很多{}。此外,它可能效率不高。

答案 3 :(得分:1)

这可能适合你(GNU sed):

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

如果该行不包含strA拯救。如果是,它还包含strB删除它。