我一直在查看tail -f
最近使用的一些服务器日志,并且认为如果我可以格式化输出会更容易看到一些东西。实际上,我正在寻找的只是一种可能为某些单词着色(由正则表达式确定)并可能删除某些单词(再次由正则表达式确定)的方法。
3 回答
tail -f
将into的输出通过管道传输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 颜色转义序列围绕您选择的单词。(嗯......让我看看)。
编辑好的,明白了:
这是一个以深红色输出“Hello”的示例:
echo -e "\033[31mHello\033[0m"
发生了什么?首先,我使用echo -e
它echo
不会将斜杠转换为屏幕上的斜杠,而是将转义序列读取\033
为单个转义字符。这实际上只是八进制的 33,即 27(ESC 键的序数)。
所以真正被发送到屏幕上的是这样的:
<ESC>[32mHello<ESC>[0m
ANSI 显示将其解释为“首先执行命令32m
,输出“Hello”,然后执行命令0m
。
在这种情况下,命令的32m
意思是“将前景色设置为 2”,由于颜色 #2 是深红色,终端使用的“笔”现在将是深红色。这意味着从此时起,屏幕上显示的所有文本都将变为深红色。
当我们完成输出应该是红色的文本时,我们希望重置颜色,所以我们调用将0m
颜色重置为正常的命令。
有关所有转义码的列表,请在 [ http://en.wikipedia.org/wiki/ANSI_escape_code Wikipedia] 中查找,或者直接在 google 中查找。
因此,您的 sed 脚本所要做的就是将您选择的单词替换为被颜色包围的单词。例如,要替换 中的单词“Feb” /var/log/messages
,请执行以下操作:
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"
它将为“Feb”、“Mar”、“Apr”着色 - 每个都是深红色。
我希望这能让您对如何做您需要的事情有所了解!
感谢 scraimer 和 Adam,我想出了很多我想要的东西,我想我会在这里分享给其他人:
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/