我知道如何使用 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