对多个参数使用 grep -v

对多个参数使用 grep -v

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

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

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

答案1

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

$ grep -v -e foo -e bar file

这说明了你的命令所做的同样的事情:打印既不file包含“foo”也不包含“bar”的行。

请记住,-v完全删除会颠倒这一点;它也改变了逻辑运算!您将获得包含“foo”的所有行或者“酒吧”。

答案2

grep -Ev 'word1|word2'应该可以正常工作

答案3

您还可以使用花括号进行参数扩展:

grep -v -e{foo,bar}

这实际上等同于:

grep -v -e foo -e bar

(我没有足够的声誉点来添加此评论)

答案4

在 Solaris 11.4 上,如果您PATH正确设置变量以选择比默认设置稍微更有用的命令行工具,那么您将能够使用

grep -E -v 'foo|bar' file

如果你像这样设置,你将获得更强大的grep默认功能:grepPATH

PATH=$(/usr/xpg6/bin/getconf PATH):$PATH

PATH在默认的 Solaris 11.4 系统上,这会将以下路径添加到现有变量值的前面:

/usr/xpg6/bin:/usr/xpg4/bin:/usr/bin:/opt/developerstudio12.5/bin:/opt/solarisstudio12.4/bin

另请参见man standardsSolaris 系统。

相关内容