2

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

#!/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),此时它无法尾随任何新的日志行。任何想法为什么?

4

1 回答 1

2

这会使您作为参数传递给脚本的内容着色。相反,您想要的是从标准输入中读取。将您的 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
于 2013-05-10T04:52:12.487 回答