有什么方法可以使用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) 是否可以做到这一点。
如果您的版本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)
| 归档时间: |
|
| 查看次数: |
9246 次 |
| 最近记录: |