在多个参数上使用 grep -v

rah*_*hmu 23 grep solaris

有没有更简单的方法来做到这一点? grep -v foo file | grep -v bar

使用 egrep 可能有非常优雅的方法,但是如何使用简单的旧 grep 呢?

编辑:grep -v 'foo\|bar' file似乎只适用于 GNU grep。我在 Solaris 上。有什么解决办法吗?

War*_*ung 34

您可以在单个grep命令中进行多个测试,方法是将每个表达式与-e参数一起传递,而不是像通常看到的那样作为第一个非选项参数:

$ grep -v -e foo -e bar file
Run Code Online (Sandbox Code Playgroud)

这与您的命令所做的相同:打印file既不包含“foo”也不包含“bar”的行。

请记住,删除-v完全颠倒了这一点;它也改变了逻辑操作!您将获得所有包含“foo”“bar”的行。


Šim*_*óth 19

grep -Ev 'word1|word2' 应该工作得很好

  • @rahmu `\|` 是 GNU grep 扩展,但您可以使用 `-E` 和 `|` 运算符以可移植的方式实现相同的功能。 (2认同)