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

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

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

grep 'keyword1' file.log | grep 'keyword2'

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

答案1

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

grep 'keyword1' file.log --color=always | grep 'keyword2'

作为gertvdijk 指出,此命令可能效率不高,但它会查找所有同时包含关键字1和关键字2的行。如果要用不同颜色突出显示它们,可以使用

grep 'keyword1' file.log --color=always | GREP_COLORS="mt=01;34" grep --color=always 'keyword2'

这将用蓝色突出显示关键字2。该mt部分表示grep将使用此CSI 代码01;34意思是“在正常背景上使用粗蓝色前景”。

答案2

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

grep -E "\<foo\>.*\<bar\>" file

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

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

grep -E "(foo|bar)" file

相关内容