结合ccze和grep?

时间:2016-08-19 16:06:25

标签: linux bash grep pipe

ccze是一款出色的原木着色剂。问题是,尽管手册中有说明,/usr/lib64/ccze$HOME/.ccze中没有插件。看起来所有插件都被编译成二进制文件(因此它们不是插件),我无法轻松修改突出显示。

我想要达到什么目标?

我需要添加更多模式以红色突出显示。尤其是被白色空间包围的单个0。由于我无法轻易修改ccze,我正在考虑将其与grep:

结合使用
tail -f `/bin/ls -1td /var/log/updates/index_*.log` | ccze -A | grep --color '\| 0 '

但是这并没有产生任何输出(挂起?),尽管事实是:

tail -f `/bin/ls -1td /var/log/updates/index_*.log` | grep --color '\| 0 '

正确地突出显示零和:

tail -f `/bin/ls -1td /var/log/updates/index_*.log` | ccze -A 

正确地突出其余部分。

提问时间

你可以帮我修改上面的命令,以便cczegrep很好地一起玩吗?或者只是如何自定义ccze - 而无需重新编译,以便正确突出显示新内容。

答案我不想看

  • 为什么不使用多头,它是如此完美?
  • 为什么不使用任何其他库(这不是ccze的替代品)?

2 个答案:

答案 0 :(得分:0)

阅读手册,看​​起来你可以使用

-c, --color KEY=COLOR
    Set the color of the keyword KEY to COLOR, like one would do in one of the configuration files.

您可能想尝试将0设置为KEY。

<强>更新

请忽略以上内容。

我弄清楚发生了什么。首先,这并不是悬而未决。这是因为你正在使用

tail -f

当您删除 -f 时,它将快速退出,并且grep不会返回任何内容。第二件事是你看到这种行为的原因。这是因为ccze使用ANSI颜色代码格式化输出。你可以用tee测试它,例如:

tail `/bin/ls -1td /var/log/updates/index_*.log` | ccze -A | tee my_log

当您打开 my_log 时,您会发现很多ANSI代码,例如我的文件包含:

| 0 Some message

然而,使用 tee ccze -A 日志:

^[[22m^[[36m|^[[0m^[[22m^[[36m ^[[0m^[[22m^[[37m0^[[0m^[[22m^[[36m ^[[0m^[[22m^[[36mSome^[[0m^[[22m^[[36m ^[[0m^[[22m^[[36mmessage^[[0m^[[22m^[[36m ^[[0m^[[0m

如您所见,不再有 | 0 字符串。这就是为什么grep什么都不返回的原因。如果你不想重新安装ccze,那么我就不会看到干净的解决方案,而是在你的grep命令中使用这个奇怪的模式。

更新2:

您也可以尝试使用sed:

tail `/bin/ls -1td /var/log/updates/index_*.log` | sed -e 's/| 0/\x1b[31m&\x1b[39m/' | ccze -A

但在我的情况下, ccze 更改了 0 的颜色。

还有一个配置文件:

/etc/cczerc

您可以更改数字的颜色等。

答案 1 :(得分:0)

ccze FAQ提到了在某些系统上,&#34;插件&#34;实际上是#34;内置&#34;:有一个PCRE编译错误,除了静态链接插件之外,作者还不知道如何修复。

所以,你已经死在水中,修改了插件的工作方式,从而使原位修改。但是...... 原位修改的问题通常是it's not possible to detect the current color, set a new one, then get back to that current color

考虑:

ccze -A <httpd.log | sed "s/ 0 /$(tput setaf 2)&$(tput sgr0)/"

除非这会将匹配后的颜色重置为普通终端,否则可能会破坏您想要的彩色输出。因此,您可能需要设置和重置除颜色以外的其他内容,例如粗体闪烁下划线

考虑:

ccze -A <httpd.log | sed "s/ 0 /$(tput smso)&$(tput rmso)/"

带来了这个&#34; 0&#34;变成大胆的。为方便起见,我在这里使用tput,您当然可以直接使用ANSI escape sequences