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\)=一致srcまたはdstフォロー=
  • [^:]\+:[^:]\+コロン以外の文字 1 つ以上、その後に:コロン以外の文字 1 つ以上
  • \|または
  • proto=[^ ]\+'一致proto=の後に空白以外の文字が 1 つ以上続きます。

以下を使用して改行文字を貼り付けることができます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

おすすめ記事