我最近一直在查看一些服务器日志tail -f
,并且认为如果我可以格式化输出,那么看起来要容易得多.真正我正在寻找的是一种可能为某些单词着色的方法(由正则表达式确定),并且可能删除某些单词(再次由正则表达式确定).
我知道 有些程序可以实时显示服务器日志和诸如此类的东西,但我对此更感兴趣.
管的输出tail -f
入sed
,并在一些添加ANSI转义码.例如,以下内容将使用红色(颜色31)和所有带亮黄色的颜色(颜色93)的所有数字着色:
RED=`echo -en '\e[31m'` YELLOW=`echo -en '\e[93m'` RESET=`echo -en '\e[00m'` tail -f file | sed -E "s/([0-9]+)/$RED\1$RESET/g;s/(\"[^\"]*\")/$YELLOW\1$RESET/g"
我认为你正在寻找的是某种形式 sed
脚本,它将围绕您使用ANSI Color转义序列选择的单词.(嗯...... lemme看).
编辑好了,得到了:
以下是以暗红色输出"Hello"的示例:
echo -e "\033[31mHello\033[0m"
发生了什么?首先,我使用echo -e
,使echo
不上的斜线转换成屏幕上的斜线,而是读的转义序列\033
作为一个转义字符.这实际上只是十进制的33,即27(ESC键的序数).
那么真正被发送到屏幕的是:
[32mHello [0m
其中ANSI显示解释为"首先执行命令32m
,输出"Hello",然后执行命令0m
.
在这种情况下,命令 32m
意味着"将地面颜色设置为2",并且由于颜色#2是深红色,因此终端使用的"笔"现在将是深红色.这意味着从这一点开始,屏幕上显示的所有文本都将显示为深红色.
当我们输出应该是红色的文本时,我们希望重置颜色,因此我们调用0m
将颜色重置为正常的命令.
有关所有转义码的列表,请查看[ http://en.wikipedia.org/wiki/ANSI_escape_code维基百科]或只是谷歌搜索它.
所以你的sed脚本所要做的就是用颜色包围的单词替换你选择的单词.例如,要替换单词"Feb" /var/log/messages
,请执行以下操作:
tail /var/log/messages | sed -e "s/Feb/\\o033[31m&\\o033[0m/"
(您可能必须以root身份执行此操作才能实际阅读 /var/log/messages
)
所有这一切sed
确实是搜索词"二月",并用相同的转义序列围绕着它,因为我们上面使用.
您可以将其展开为多个单词着色:
tail /var/log/messages | sed -e "s/\(Feb\|Mar\|Apr\)/\\o033[31m&\\o033[0m/g"
哪个颜色为"2月","3月","4月" - 每个都是深红色.
我希望这可以让你知道如何做你需要的!