Grep Syslog 防火牆日誌

Grep Syslog 防火牆日誌

我有一個包含防火牆日誌的文件,如下所示:

Feb             3       0:18:51 17.1.1.1                      id=firewall     sn=qasasdasd "time=""2018-02-03"     22:47:55        "UTC""" fw=111.111.111.111       pri=6    c=2644        m=88    "msg=""Connection"      "Opened"""      app=2   n=2437       src=12.1.1.11:49894:X0       dst=4.2.2.2:53:X1       dstMac=42:16:1b:af:8e:e1        proto=udp/dns   sent=83 "rule=""5"      "(LAN->WAN)"""

我需要得到一個輸出,應該是這樣的:

src=ipaddress:port , dst=ipaddress:port , proto=udp/dns

具體來說,對於上述輸入,

src=12.1.1.11:49894,dst=4.2.2.2:53,proto=udp/dns

我試過

cat logfile.txt | awk '{ print $18" "$19" "$21 }'

但結果似乎與我的預期不同。

答案1

使用grep

$ grep -o '\(src\|dst\)=[^:]\+:[^:]\+\|proto=[^ ]\+' logfile.txt
src=12.1.1.11:49894
dst=4.2.2.2:53
proto=udp/dns

描述:

  • '\(src\|dst\)=匹配srcdst後跟=
  • [^:]\+:[^:]\+一個或多個非冒號字符,後跟:,後面跟著一個或多個非冒號字符
  • \|或者
  • proto=[^ ]\+'匹配proto=後面跟一個或多個非空格字符

我們可以將換行符號黏合在一起paste

$ grep -o '\(src\|dst\)=[^:]\+:[^:]\+\|proto=[^ ]\+' logfile.txt | paste -s -d,
src=12.1.1.11:49894,dst=4.2.2.2:53,proto=udp/dns

答案2

根據您所擁有的:

awk '{print $18,$19,$21}' OFS=" , " logfile.txt | sed 's|:X[0-1]||g'

您不需要catawk已經寫入標準輸出那樣。上面的命令列印那些由空格分隔的字段,這就是逗號的作用,然後它將字段分隔符設置為由空格包圍的逗號並用於sed刪除:X0and :X1

輸出:

src=12.1.1.11:49894 , dst=4.2.2.2:53 , proto=udp/dns

相關內容