【问题标题】:Tailing less with a custom LESSOPEN colorize script使用自定义 LESSOPEN 着色脚本减少拖尾
【发布时间】:2013-05-10 04:22:04
【问题描述】:

我编写了以下脚本来从日志文件中挑选关键字并突出显示术语:

#!/bin/bash
case "$1" in
    *.log) sed -e "s/\(.*\[Error\ \].*\)/\x1B[31m&\x1b[0m/" "$1" \
            | sed -e "s/\(.*\[Warn\ \ \].*\)/\x1B[33m&\x1b[0m/" \
            | sed -e "s/\(.*\[Info\ \ \].*\)/\x1B[32m&\x1b[0m/" \
            | sed -e "s/\(.*\[Debug\ \].*\)/\x1B[32m&\x1b[0m/" 
    ;;
esac

它可以正常工作,直到我尝试跟随/tail less (Shift+F),此时它无法跟踪任何新的日志行。任何想法为什么?

【问题讨论】:

标签: bash less-unix


【解决方案1】:

这会使您作为参数传递给脚本的内容着色。你想要的是从标准输入读取。将您的 case 语句包装在以下循环中:

while read LINE; do
    case "$LINE" in
         # ...  rest of your code here
    esac
done

现在您可以将其通过管道传输到您的脚本中:

tail -f somefile | colorize_script.sh

补充答案:

几年前我也有同样的需求,所以我编写了一个类似于 grep 的脚本,但会为匹配的文本着色而不是隐藏不匹配的文本。如果你的系统上有 tcl,你可以从这里获取我的脚本:http://wiki.tcl.tk/38096

只需将代码(只有 200 行)复制/粘贴到一个空文件中,然后对其进行 chmod 以使其可执行。将其命名为 cgrep(用于 color-grep)并将其放在可执行路径中的某个位置。现在您可以执行以下操作:

tail -f somefile | cgrep '.*\[Error\s*\].*' -fg yellow -bg red

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    相关资源
    最近更新 更多