Linux

如何根據某些欄位填寫iptable結果並使用tail命令查看?

  • January 2, 2020

我有這個日誌:

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,它將無法正常工作!我想看到現場結果,所以尾巴應該在那裡。

試試這是否有效:

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

.*任何字元

$的行尾

然後我們只需使用sedwith -E(extended regex) 將文件中的每一行替換為三個擷取組 (\1 \2 \3)

可能有更短的正則表達式可以做到這一點。

引用自:https://serverfault.com/questions/997341