Einselne Felder aus Zeile auslesen - sed Problem

  • Moin,


    Ich versuche ein Firewalllog zu zerlegen. Das Logfile sieht so aus:



    Code
    1. Apr 11 00:00:00 caefr0p247 kernel: [FW_O] IN= OUT=eth0 SRC=44.47.105.108 DST=44.47.100.107 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=2652 DF PROTO=TCP SPT=47239 DPT=6881 WINDOW=5840 RES=0x00 SYN URGP=0 UID=132489
    2. Apr 11 00:00:01 caefr0p247 kernel: [FW_O] IN= OUT=eth0 SRC=44.47.105.108 DST=44.47.100.107 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=18798 DF PROTO=TCP SPT=60402 DPT=6881 WINDOW=5840 RES=0x00 SYN URGP=0 UID=132489

    Im grunde funktioniert es auch schon so wie ich das will mit:


    Soweit so hübsch aber es gibt Zeilen da fehlt z.B. das Feld UID und dann funktioniert meine Zeile nicht mehr.


    Ausgegeben wird dann die gesamte Zeile. Ich aber würde mir wünschen, dass halt dann UID einfach leer ist.


    Beispiel Zeile:

    Code
    1. Apr 11 15:54:27 caefr0p247 kernel: [FW_O] IN= OUT=eth0 SRC=44.47.105.108 DST=10.122.80.198 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=44862 DF PROTO=TCP SPT=791 DPT=4045 WINDOW=5840 RES=0x00 SYN URGP=0


    Jemand ne idee?


    Gruß Lunepi

    --
    man ist das System-Anzeigeprogramm für die Handbuchseiten von Linux.

  • Schnellschuß: Das hier

    Code
    1. sed 's/.*DST=\([0-9.]*\).*PROTO=\([A-Z]*\).*DPT=\([0-9.]*\).\(*UID=\([0-9.]*\)\)*.*/\1;\2;\3;\4/g'

    scheint zu funktionieren.

  • Hm, leider nein, den jetzt wird UID gar nicht ausgegeben.

    --
    man ist das System-Anzeigeprogramm für die Handbuchseiten von Linux.

  • Ich verstehe die Idee - schade :/

    --
    man ist das System-Anzeigeprogramm für die Handbuchseiten von Linux.

  • Wenn's nicht unbedingt sed sein muss:


    Code
    1. awk '{ for( i = 1; i <= NF; i++ ) { split($i,kv,"="); table[kv[1]] = kv[2] ; } printf( "%s %s %s\n", table["SRC"], table["PROTO"], table["UID"] ) ; delete table; }' FW.log
  • Danke, sehr geil!


    Nein ich bin nicht auf SED angewiesen, mir erschien es erstmal am einfachsten.

    Jetzt muss nur noch verstehen, was du gezaubert hast...

    Aber so ist es natürlich ziemlich flexible.... Cool.


    Gruß Lunepi

    --
    man ist das System-Anzeigeprogramm für die Handbuchseiten von Linux.