Answers:
该grep
命令接受一个--color=always
选项,因此您可以使用
grep 'keyword1' file.log --color=always | grep 'keyword2'
正如gertvdijk指出的那样,该命令可能效率不高,但是它将查找同时包含keyword1和keyword2的所有行。如果要用不同的颜色突出显示它们,可以使用
grep 'keyword1' file.log --color=always | GREP_COLORS="mt=01;34" grep --color=always 'keyword2'
会以蓝色突出显示关键字2。该mt
部分表示grep
将使用此CSI代码突出显示匹配的文本,并01;34
表示“正常背景上的蓝色粗体前景”。
grep -R --color=always keyword1 . | grep keyword2
应该可以。您是否要再次重定向输出(例如将第二个管道输送grep
到less -R
)?如果是这样,您还需要添加--color=always
第二个。
--color=auto
在第二个grep
之后紧接着需要一个'keyword2'
。
--color=always
了答案,因为您可能希望将其传递给less
其他对象。
尝试实际的正则表达式,而不是通过管道传递到的另一个实例grep
,例如:
grep -E "\<foo\>.*\<bar\>" file
不幸的是,这限制了匹配行,其中关键字仅按此顺序匹配。无论如何,grep
在您的问题中使用效率很低,您应该避免使用它。对于您的情况,@ DanielH的答案可能要简单得多。
对于关键字的“或”匹配,我会定期使用:
grep -E "(foo|bar)" file
foo.*bar|bar.*foo
,或者在这种情况下是否甚至有必要(它似乎是一个日志文件,可能具有关键字的标准顺序)。在更新您的答案之前,我已经添加了答案,但是我会一直保留它,以防万一grep
确实需要链式s(或者其他不应将彩色输出发送到终端,如grep | less -R
)的情况。