当前位置:  开发笔记 > 运维 > 正文

将格式应用于unix shell

如何解决《将格式应用于unixshell》经验,为你挑选了2个好方法。

我最近一直在查看一些服务器日志tail -f,并且认为如果我可以格式化输出,那么看起来要容易得多.真正我正在寻找的是一种可能为某些单词着色的方法(由正则表达式确定),并且可能删除某些单词(再次由正则表达式确定).

我知道 有些程序可以实时显示服务器日志和诸如此类的东西,但我对此更感兴趣.



1> Adam Rosenfi..:

管的输出tail -fsed,并在一些添加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"



2> Shalom Craim..:

我认为你正在寻找的是某种形式 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月" - 每个都是深红色.

我希望这可以让你知道如何做你需要的!

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有