使用 grep 进行多种排除模式

使用 grep 进行多种排除模式

我想选择与指定模式不匹配的行,其中有多个模式需要排除。例如,我想排除以关键字apple和开头的行banana

$ grep -v '^apple' foo.txt | grep -v '^banana' -

我想知道是否有办法用一个表达式或一次调用来实现这一点grep。我尝试了以下方法,但它们似乎没有像希望的那样工作:

$ grep -v "^apple" -v "^banana" foo.txt
$ grep -v "^(apple|banana)" foo.txt
$ grep -v "(^apple)|(^banana)" foo.txt

排除多种模式的正确方法是什么?

答案1

要指定“替代”匹配,您必须包含“E”开关,例如:

$ grep -Ev "^(apple|banana)" foo.txt
$ grep -Ev "(^apple)|(^banana)" foo.txt

以上任一版本均可以工作。

答案2

您还可以使用 指定多个模式-e

grep -e '^apple' -e '^banana' -v foo.txt

grep -e '^apple' -e '^banana' foo.txt

相关内容