我编写了以下脚本来从日志文件中挑选关键字并突出显示术语:
#!/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),此时它无法拖尾任何新的日志行。有什么想法吗?
答案 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