删除包含两个字符串的行
Delete lines that contain two strings
我正在尝试使用 sed
删除文本文件中的一些行。我只想删除包含两个字符串的行。命令 \|
等同于布尔值 OR
。布尔运算符 AND
的命令是什么?
我正在寻找这样的东西:
sed '/strA'AND'strB/d' file.txt
您可以使用相同的 \|
OR (alternation) 运算符。下面的 sed 命令将删除所有同时具有 strA
和 strB
的行,而不管顺序如何。
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
删除它。
我正在尝试使用 sed
删除文本文件中的一些行。我只想删除包含两个字符串的行。命令 \|
等同于布尔值 OR
。布尔运算符 AND
的命令是什么?
我正在寻找这样的东西:
sed '/strA'AND'strB/d' file.txt
您可以使用相同的 \|
OR (alternation) 运算符。下面的 sed 命令将删除所有同时具有 strA
和 strB
的行,而不管顺序如何。
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
删除它。