我想选择与指定模式不匹配的行,其中有多个模式需要排除。例如,我想排除以关键字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