Linux
如何根據某些欄位填寫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,它將無法正常工作!我想看到現場結果,所以尾巴應該在那裡。
試試這是否有效:
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
with-E
(extended regex) 將文件中的每一行替換為三個擷取組 (\1 \2 \3)可能有更短的正則表達式可以做到這一點。