由于我们最近的开发工作,我必须监视一些应用程序的输出日志,特别是我正在寻找特定的错误代码。因为我现在的脚本编写能力有限,所以我唯一能做的就是
tail -f
日志文件并继续寻找更新。我也用 PuTTY。如果可能的话,我希望有人能够就如何实现以下任一目标提出一些建议:
只需在 tail -f 中添加 sed 正则表达式即可对输出进行着色,即
tail -f somefile.log | sed 's/keyword/highligtedkeyword/g'
只需添加一些颜色转义序列..我不太确定的铃声部分..
考虑到@bjarneh 提出了几乎最终的解决方案,这个问题没有得到完全回答,这很奇怪。
因此,为了其他从搜索引擎来到这里的人 - 就在这里。
要在终端中实现彩色文本,必须使用 ANSI 颜色代码。
就像这个例子:
echo -e "\e[$3{COLOR_CODE};1mMy colored text\e[0m"
其中
${COLOR_CODE}
可以是1到6之间的数字,但基数是:
可以通过将这些成分添加在一起来获得其他颜色 - 例如
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 颜色序列,但仅以此为例。