【问题标题】:combining ccze and grep?结合ccze和grep?
【发布时间】:2016-12-26 21:01:55
【问题描述】:

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 - 无需重新编译,因此它可以正确突出显示新内容。

我不想看到的答案

  • 为什么不用 multitail,它太完美了?
  • 为什么不使用任何其他库(它不能直接替代 ccze)?

【问题讨论】:

  • 这不起作用”不是对问题的有用描述。确切地说,tail | ccze -A | grep 是做什么的?悬挂?产生错误信息? CPU 过热?
  • @Robᵩ - 是的,它挂起并且不产生任何输出。

标签: linux bash grep pipe


【解决方案1】:

ccze FAQ 提到了在某些系统上,“插件”实际上是“内置”的原因:存在一个 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)/"

除了这会将匹配后的颜色重置为正常终端,这可能会破坏您想要的彩色输出。因此,您可能需要设置和重置颜色以外的其他内容,例如 boldblinkunderline

考虑:

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

这会将“0”变为粗体。我这里用tput方便,你当然可以直接用ANSI escape sequences

【讨论】:

    【解决方案2】:

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

    -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
    

    但是,这是使用 teeccze -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
    

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

    【讨论】:

    • KEY 是一个关键字 - 为每个配置文件单独定义的一组预定义的单词/短语。你不能改变它。例如,当您要将日期字符串的颜色从默认更改为其他颜色时,此设置很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多