grep :如何为 2 个关键字着色?

Rap*_*tor 12 grep

我知道如何使用 1 个命令 grep 2 个关键字,但我只能设法在 output 中为其中一个着色。这是我的命令:

grep 'keyword1' file.log | grep 'keyword2'
Run Code Online (Sandbox Code Playgroud)

只有keyword2突出显示。我怎样才能keyword1同时突出显示?

Dan*_*l H 16

grep命令接受一个--color=always选项,因此您可以使用

grep 'keyword1' file.log --color=always | grep 'keyword2'
Run Code Online (Sandbox Code Playgroud)

正如gertvdijk 指出的那样,此命令可能效率低下,但它会查找同时包含关键字 1 和关键字 2 的所有行。如果你想用不同的颜色突出它们,你可以使用

grep 'keyword1' file.log --color=always | GREP_COLORS="mt=01;34" grep --color=always 'keyword2'
Run Code Online (Sandbox Code Playgroud)

这将以蓝色突出显示关键字2。该mt部分表示grep将使用此CSI 代码突出显示匹配的文本,并01;34表示“在正常背景上加粗的蓝色前景”。


ger*_*ijk 4

尝试实际的正则表达式,而不是管道到另一个实例grep,例如:

grep -E "\<foo\>.*\<bar\>" file
Run Code Online (Sandbox Code Playgroud)

不幸的是,这限制了关键字仅按此顺序匹配的匹配行。无论如何,在你的问题中使用grep是相当低效的,你应该避免它。@DanielH 的答案对于你的情况来说可能要简单得多。

对于关键字的“或”匹配,我经常使用:

grep -E "(foo|bar)" file
Run Code Online (Sandbox Code Playgroud)