我已经编写了以下脚本来从日志文件中挑选关键字并突出显示术语:
#!/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它工作正常,直到我尝试使用follow/tail less (Shift+F),此时它无法跟踪任何新的日志行。你知道为什么吗?
发布于 2013-05-10 12:52:12
这会对作为参数传递给脚本的内容进行着色。相反,您想要的是从stdin读取。将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 redhttps://stackoverflow.com/questions/16475143
复制相似问题