格雷普。使用单个条件以任何顺序查找多个 AND 模式

Kir*_*ill 6 grep

有什么方法可以使用grep单个条件以任何顺序搜索匹配多个模式的条目?

如何使用多个 AND 模式运行 grep 中所示?对于我可以使用的多种模式

grep -e 'foo.*bar' -e 'bar.*foo'
Run Code Online (Sandbox Code Playgroud)

但我必须在这里写 2 个条件,3 个模式的 6 个条件等等......如果可能的话,我想写一个条件。要以任何顺序查找模式,您可以建议使用:

grep -e 'foo' | grep -e 'bar' # at least i do not retype patterns here
Run Code Online (Sandbox Code Playgroud)

这将工作,但我希望看到的彩色输出,在这种情况下,只有将突出显示。

我想写条件一样简单

awk '/foo/ && /bar/'
Run Code Online (Sandbox Code Playgroud)

如果可能的话grep(awk 不突出显示结果,我怀疑它可以轻松完成)。

agrep 可能可以做我想做的事,但我想知道我在 ubuntu 12.04 上的默认 grep (2.10-1) 是否可以做到这一点。

Bar*_*mar 5

如果您的版本grep支持 PCRE(GNUgrep使用-P--perl-regexp选项执行此操作),您可以使用前瞻以任何顺序匹配多个单词:

grep -P '(?=.*?word1)(?=.*?word2)(?=.*?word3)^.*$'
Run Code Online (Sandbox Code Playgroud)

不过,这不会突出显示这些词。前瞻是零长度断言,它们不是匹配序列的一部分。

我认为你的管道解决方案应该适用于此。默认情况下,grep仅在输出到达终端时才对输出进行着色,因此只有管道中的最后一个命令会突出显示,但您可以使用--color=always.

grep --color=always foo | grep --color=always bar
Run Code Online (Sandbox Code Playgroud)