Awk
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 }'
但結果似乎與我的預期不同。
使用
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\)=
匹配src
或dst
後跟=
[^:]\+:[^:]\+
一個或多個非冒號字元,後跟:
,後跟一個或多個非冒號字元\|
或者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