我有一个程序可以输出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\]'