用不同的颜色标记出现的关键字

用不同的颜色标记出现的关键字

我有一个程序可以输出stdout类似的输出:

[OK]      Something is ok
[OK]      Something else is also ok
[FAIL]    This does not look good
[FAIL]    Neither does this
[OK]      At least this is fine

为了更容易地发现输出中的失败,我想用FAIL红色标记关键字的出现没有丢弃其他消息。如果我也能用绿色突出显示关键字,那就太好了OK:)。

使用管道只会显示存在关键字的egrep --color FAIL行。FAIL

答案1

基于manatwork另一个问题中的精彩小“或无”黑客,我提供了这个,这增加了获得的能力突出显示颜色:

 $ myprogram | \
   GREP_COLORS='mt=01;32' egrep --color=always '\[OK\]|' | \
   GREP_COLORS='mt=01;31' egrep --color=always '\[FAIL\]|'

也就是说,您grep对输出运行两次,GREP_COLORS每次使用不同的环境变量。

'01;32' 值表示“粗体绿色”,另一个表示“粗体红色”。请参阅维基百科有关 ANSI 代码的文章以获得更多想法。

唉,这需要 GNU grep 版本 2.5.3 或更高版本。旧版本的 GNU grep 支持不同的着色机制,但这些版本有一个错误,阻止您在管道中多次使用该功能。 BSD grep 模拟较旧的 GNU grep 着色机制,它会在管道中工作两次,但由于黑客攻击,它会大喊“空子表达式” manatwork

您可以删除前两行末尾的反斜杠,使其成为一行。为了清楚起见并与 SE 页面格式很好地配合,我只是将其拆分在这里。

答案2

您可以使用 multitail 或 ccze 来实现此目的,两者都允许配置来描述正则表达式以进行匹配和颜色。

答案3

根据沃伦·杨的回答,我写了这个Python脚本这样可以更优雅地完成同样的事情,并且需要更少的打字。这就是您使用该脚本的方式:

cat yourfile | himul '\[OK\]' '\[FAIL\]'

相关内容