我最近一直在使用tail -f
查看一些服务器日志,并且认为如果我可以格式化输出,那么看起来要容易得多。真正我正在寻找的是一种方法,可能会为某些单词着色(由正则表达式确定),也许删除某些单词(再次由正则表达式确定)。
答案 0 :(得分:12)
将tail -f
的输出导入sed
,并添加一些ANSI escape codes。例如,以下内容将使用红色(颜色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"
答案 1 :(得分:5)
我认为您正在寻找的是某种sed
脚本,它将围绕您使用ANSI Color转义序列选择的单词。 (嗯... lemme look)。
编辑好的,明白了:
以下是以深红色输出“Hello”的示例:
echo -e "\033[31mHello\033[0m"
发生了什么事?首先,我使用echo -e
,以便echo
不会将斜杠转换为屏幕斜杠,而是将\033
的转义序列作为单个转义字符读取。这实际上只是十进制的33,即27(ESC键的序数)。
所以真正发送到屏幕的是:
<ESC>[32mHello<ESC>[0m
ANSI显示解释为“首先执行命令32m
,然后输出”Hello“
执行命令0m
。
在这种情况下,命令32m
表示“将forground颜色设置为2”,并且由于颜色#2是深红色,因此终端使用的“笔”现在将是深红色。这意味着从这一点开始,屏幕上显示的所有文本都将显示为深红色。
当我们输出应该是红色的文本时,我们希望重置颜色,因此我们调用命令0m
将颜色重置为正常。
有关所有转义码的列表,请查看[http://en.wikipedia.org/wiki/ANSI_escape_code维基百科]或只是谷歌搜索它。
所以你的sed脚本所要做的就是用颜色包围的单词替换你选择的单词。例如,要替换/var/log/messages
中的单词“Feb”,请执行以下操作:
tail /var/log/messages | sed -e "s/Feb/\\o033[31m&\\o033[0m/"
(您可能必须以root身份执行此操作才能实际阅读/var/log/messages
)
所有sed
所做的就是搜索单词“Feb”并用与我们上面使用的相同的转义序列包围它。
您可以将其展开为多个单词着色:
tail /var/log/messages | sed -e "s/\(Feb\|Mar\|Apr\)/\\o033[31m&\\o033[0m/g"
哪个颜色为“2月”,“3月”,“4月” - 每个都是深红色。
我希望这能让你知道如何做你需要的事情!
答案 2 :(得分:3)
感谢刮刀和亚当,我想出了我追求的东西,我想我会在这里为其他人分享:
RED=`echo -en '\e[31m'`
YELLOW=`echo -en '\e[93m'`
RESET=`echo -en '\e[00m'`
# line breaks here are just for formatting
tail -f ~/access-logs/access.log | sed -e "s@\([0-9\.]\+\) - -
\[[0-9]\+/[a-zA-Z]\+/[0-9]\+:\([0-9]\+:[0-9]\+:[0-9]\+\) +[0-9]\+] \"
\(.\+\) HTTP/1\.[01]\" \([0-9]\+\) \([-0-9]\+\) \"\([^\"]\+\)\".*
@\n\2 $YELLOW\4$RESET (\1)\n$RED\3$RESET\nBytes: \5\nFrom: \6@g"
# here's the full line if you wanted to copy it
# tail -f ~/access-logs/access.log | sed -e "s@\([0-9\.]\+\) - - \[[0-9]\+/[a-zA-Z]\+/[0-9]\+:\([0-9]\+:[0-9]\+:[0-9]\+\) +[0-9]\+] \"\(.\+\) HTTP/1\.[01]\" \([0-9]\+\) \([-0-9]\+\) \"\([^\"]\+\)\".*@\n\2 $YELLOW\4$RESET (\1)\n$RED\3$RESET\nBytes: \5\nFrom: \6@g"
这转变了:
182.108.1.20 - - [04/Feb/2009:23:24:41 +1000] "GET /images/exam_room.jpg HTTP/1.0" 200 8559 "http://www.myserver.com/courses/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
进入此(但有一些颜色):
23:24:41 200 (182.108.1.20)
GET /images/exam_room.jpg
Bytes: 8559
From: http://www.myserver.com/courses/