有什么方法可以使用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 次 |
最近记录: |