Logging 将格式应用于unix shell

Logging 将格式应用于unix shell,logging,tail,Logging,Tail,最近,我一直在使用tail-f查看一些服务器日志,并认为如果可以格式化输出,查看一些内容会容易得多。实际上,我所寻找的是一种可能给某些单词上色(由正则表达式决定),或者删除某些单词(同样,由正则表达式决定)的方法 我有一些程序可以实时显示服务器日志等等,但我更感兴趣。我想你要找的是某种sed脚本,它会用ANSI颜色转义序列围绕你选择的单词。(嗯……让我看看) 编辑好的,明白了: 下面是以深红色输出“Hello”的示例: echo -e "\033[31mHello\033[0m" 发生了什么事

最近,我一直在使用
tail-f
查看一些服务器日志,并认为如果可以格式化输出,查看一些内容会容易得多。实际上,我所寻找的是一种可能给某些单词上色(由正则表达式决定),或者删除某些单词(同样,由正则表达式决定)的方法


我有一些程序可以实时显示服务器日志等等,但我更感兴趣。

我想你要找的是某种
sed
脚本,它会用ANSI颜色转义序列围绕你选择的单词。(嗯……让我看看)

编辑好的,明白了:

下面是以深红色输出“Hello”的示例:

echo -e "\033[31mHello\033[0m"
发生了什么事?首先,我使用了
echo-e
,这样
echo
就不会将斜杠转换为屏幕上的斜杠,而是将
\033
的转义序列作为单个转义字符读取。实际上,八进制只有33,也就是27(ESC键的序号)

因此,真正发送到屏幕上的是:

<ESC>[32mHello<ESC>[0m
(您可能必须以root用户身份执行此操作才能实际读取
/var/log/messages

sed所做的就是搜索单词“Feb”,并用我们上面使用的相同转义序列将其包围

您可以将其展开为多个单词的颜色:

tail /var/log/messages | sed -e "s/\(Feb\|Mar\|Apr\)/\\o033[31m&\\o033[0m/g"
它会把“二月”、“三月”、“四月”都涂成深红色


我希望这能让你了解如何做你需要的事情

tail-f
的输出导入
sed
,并添加一些。例如,以下内容将使所有数字显示为红色(颜色31),所有带引号的字符串显示为亮黄色(颜色93):


多亏了斯克里默和亚当,我想出了我想要的东西,我想我会在这里为其他人分享:

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)"
(但带有一些颜色):


您需要将-E替换为-E并转义所有括号。tail-f文件| sed-e“s/([0-9]+)/$RED\1$RESET/g;s/(\“[^\”]*\”)/$YELLOW\1$RESET/g“严格来说,-e不是必需的-E是一个使用扩展正则表达式的选项,因此您不需要转义括号,但显然-E在所有版本的sed上都不可用。如果您的
echo
版本不支持
\E
,请尝试改用
\x1b
\033
来表示(这些是sed的十六进制和八进制表示)。
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/