首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用自定义LESSOPEN colorize脚本减少尾部

使用自定义LESSOPEN colorize脚本减少尾部
EN

Stack Overflow用户
提问于 2013-05-10 12:22:05
回答 1查看 363关注 0票数 2

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

代码语言:javascript
复制
#!/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),此时它无法跟踪任何新的日志行。你知道为什么吗?

EN

回答 1

Stack Overflow用户

发布于 2013-05-10 12:52:12

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

代码语言:javascript
复制
while read LINE; do
    case "$LINE" in
         # ...  rest of your code here
    esac
done

现在,您可以通过管道将其添加到脚本中:

代码语言:javascript
复制
tail -f somefile | colorize_script.sh

其他答案:

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

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

代码语言:javascript
复制
tail -f somefile | cgrep '.*\[Error\s*\].*' -fg yellow -bg red
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16475143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档