如何根据某些字段填写iptable结果并用tail命令查看?

如何根据某些字段填写iptable结果并用tail命令查看?

我有这个日志:

Jan  26 01:05:47 server54 kernel: [41s58.6w4335] INPUT:DROP: IN=eth4 OUT= MAC=d3:ss:43:23:23:43 SRC=1.1.1.1 DST=127.0.0.0 LEN=40 TOS=0x00 PREC=0x00 TTL=254 ID=65259 PROTO=TCP SPT=53252 DPT=22 WINDOW=14600 RES=0x00 RST URGP=0

我想要拟合结果,以便它只显示带有时间的 SRC 和 DST 部分,首先显示以下内容:

 Jan  26 01:05:47 SRC=1.1.1.1 DST=127.0.0.0

我了解到:

tail -f -n 2 /var/log/kern.log | grep 'INPUT'

但如果我添加第二个 grep,它就不会起作用!我想看到实时结果,所以 tail 应该在那里。

答案1

尝试一下这个是否有效:

sed -E 's/^([0-9a-zA-Z: ]*[0-9]{2}:[0-9]{2}:[0-9]{2}).*(SRC=[0-9.:]+).*(DST=[0-9.:]+).*$/\1 \2 \3/g'

它让我Jan 26 01:05:47 SRC=1.1.1.1 DST=127.0.0.0

正则表达式解释:
^行首
(开始捕获组 \1
[0-9a-zA-Z: ]*零个或多个字母数字/冒号/空格
[0-9]{2}:[0-9]{2}:[0-9]{2}日期(nn:nn:nn)
)结束捕获组 \1
.*所有字符
(开始捕获组 \2
SRC=[0-9.:]+SRC= 后跟一个或多个数字/冒号/点
)结束捕获组 \2
.*任意字符
(开始捕获组 \3
DST=[0-9.:]+DST= 后跟一个或多个数字/冒号/点
)结束捕获组 \3
.*任意字符
$行尾

然后我们只需使用sed-E扩展正则表达式)将文件中的每一行替换为三个捕获组(\1 \2 \3)
可能有更短的正则表达式可以做到这一点。

答案2

接受的答案是正确的,但如果你想让它更有趣,你可以这样做:

red=$(tput bold;tput setaf 1)
yellow=$(tput bold;tput setaf 3)
green=$(tput bold;tput setaf 2)
magenta=$(tput bold;tput setaf 5)
normal=$(tput sgr0)

tail -f -n 30 /var/log/kern.log | grep "DROP"|sed -E "s/^([0-9a-zA-Z: ]+)([0-9]{2}:[0-9]{2}:[0-9]{2}).*(SRC=)([0-9.:]+).*$/$yellow\1$red \2$green \3$magenta\4/g"

它将为输出着色,并且不要忘记使用双引号代替单引号

相关内容