![使用 grep 进行多种排除模式](https://linux22.com/image/1408393/%E4%BD%BF%E7%94%A8%20grep%20%E8%BF%9B%E8%A1%8C%E5%A4%9A%E7%A7%8D%E6%8E%92%E9%99%A4%E6%A8%A1%E5%BC%8F.png)
我想选择与指定模式不匹配的行,其中有多个模式需要排除。例如,我想排除以关键字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