使用自定义LESSOPEN着色脚本减少拖尾

时间:2013-05-10 04:22:05

标签: bash less-unix

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

#!/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

它工作正常,直到我尝试跟踪/尾部减少(Shift + F),此时它无法拖尾任何新的日志行。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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

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

现在您可以将它传递到您的脚本中:

tail -f somefile | colorize_script.sh

补充答案:

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

只需将代码(只有200行)复制/粘贴到空文件中,然后通过chmod将其设置为可执行文件。将其命名为cgrep(用于color-grep)并将其放在可执行路径中的某个位置。现在你可以这样做:

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