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

The*_*dor 13 grep colors

我有一个程序可以输出一个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
Run Code Online (Sandbox Code Playgroud)

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

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

War*_*ung 10

基于manatwork另一个问题中出色的“或什么都没有”的技巧,我提供了这个,它增加了获得两种高亮颜色的能力:

 $ myprogram | \
   GREP_COLORS='mt=01;32' egrep --color=always '\[OK\]|' | \
   GREP_COLORS='mt=01;31' egrep --color=always '\[FAIL\]|'
Run Code Online (Sandbox Code Playgroud)

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

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

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

您可以删除前两行末尾的反斜杠,使其全部成为一行。为了清晰起见,我只是在此处拆分它并与 SE 页面格式配合使用。

  • 这里发生的事情是 CentOS 5 提供了一个足够老的 GNU grep,它不支持`GREP_COLORS`,复数。它仅使用较旧的`GREP_COLOR` 方法,并且该方法中有一个错误,阻止它做正确的事情。如果您将命令更改为使用 `GREP_COLOR=32` 等,它只会更改第一个匹配项的高亮颜色。如果你通过 `hexdump -c` 管道结果,你可以看到添加第二个 `egrep` 命令确实做了一些事情,但它不是合法的 ANSI。底线:您必须升级 `grep` 才能使其正常工作。 (2认同)