监控/突出显示关键字的终端标准输出

问题描述 投票:0回答:2

由于我们最近的开发工作,我必须监视一些应用程序的输出日志,特别是我正在寻找特定的错误代码。因为我现在的脚本编写能力有限,所以我唯一能做的就是

tail -f
日志文件并继续寻找更新。我也用 PuTTY。如果可能的话,我希望有人能够就如何实现以下任一目标提出一些建议:

  1. 修改 bash.rc,以便当某些关键字显示在终端中时它们会突出显示
  2. 利用 PuTTY 的音频/视觉铃声,因此每当显示关键字时警报就会响起
terminal monitoring putty tail bash
2个回答
0
投票

只需在 tail -f 中添加 sed 正则表达式即可对输出进行着色,即

tail -f somefile.log | sed 's/keyword/highligtedkeyword/g'

只需添加一些颜色转义序列..我不太确定的铃声部分..


0
投票

考虑到@bjarneh 提出了几乎最终的解决方案,这个问题没有得到完全回答,这很奇怪。

因此,为了其他从搜索引擎来到这里的人 - 就在这里。

要在终端中实现彩色文本,必须使用 ANSI 颜色代码。

就像这个例子:

echo -e "\e[$3{COLOR_CODE};1mMy colored text\e[0m"

其中

${COLOR_CODE}
可以是1到6之间的数字,但基数是:

  • 1 - 红色
  • 2 - 绿色
  • 4 - 蓝色

可以通过将这些成分添加在一起来获得其他颜色 - 例如

3
- 黄色、
5
- 洋红色、
6
- 青色。整个序列 - 例如
\e[31;1m
- 是 ANSI 终端颜色代码。同样,
\e[0m
是一个ANSI终端代码,但是这个“重置”所有文本属性,并停止对文本着色。

如何用sed实现颜色?需要存在一个“转义”序列。

echo -e
替换特定二进制代码的
\e
。要在 sed 中执行此操作,需要
\x1b

因此 - 要为任何应用程序的标准输出中的任何文本着色,请使用以下代码片段:

COLOR_CODE=1 #red
tail -f somefile.log | sed s/keyword/\x1b[3${COLOR_CODE};1m\0\x1b[0m/g"

您还可以链接着色,并使用更复杂的正则表达式:

WARNING_COLOR=3 #yellow
ERROR_COLOR=1 #red
tail -f somefile.log | sed -e "s/warning/\x1b[3${WARNING_COLOR};1m\0\x1b[0m/Ig" \
-e "s/\(error\|fault\)/\x1b[3${ERROR_COLOR};1m\1\x1b[0m/Ig"

显然还有更多 ANSI 颜色序列,但仅以此为例。

© www.soinside.com 2019 - 2024. All rights reserved.