2016-12-22 3 views
0

Ich habe Datei und ich muss einige Daten extrahieren. Das Problem, mit dem ich konfrontiert bin, ist eine Linie, die bei anderen Linien nicht annähernd gleich ist. hier ist das Beispiel:extrahiere Daten aus Textdatei mit Linux

action=accept trandisp=noop srcip=1.1.1.1 dstip=2.2.2.2 service=PING proto=1 duration=61 
action=accept trandisp=noop srcip=1.1.1.1 dstip=3.3.3.3 dstport=80 service=http proto=1 duration=61 

Ich mag den Ziel-IP mit Service in der ersten Reihe, und die Ziel-IP- mit dstport und Service in der zweiten Zeile erhalten.

Ich bin neu in Linux und ich versuchte es mit Grep und Schnitt, aber es hat nicht für mich funktioniert. bitte helfen Sie mir bei der Erklärung Ihrer Antwort.

+1

Können wir, was Sie versucht haben? Auch [this] (http://stackoverflow.com/questions/17291557/extract-strings-in-a-text-file-using-grep) könnte hilfreich sein –

+0

Gut für 'gawk' (oder vielleicht' perl') oder vielleicht 'sed' –

Antwort

0

Was ist mit diesem?
grep -o -P "dstip=[0-9.]+ (dstport=[0-9]+)? service=\w+ (dstport=[0-9]+)?" your-file

Erläuterung:

-o, --only-matching  show only the part of a line matching PATTERN 
-P, --perl-regexp   PATTERN is a Perl regular expression 

Natürlich Schlüssel-Wert um Angelegenheiten.

+0

Dies ist ein Perl Regex. Das '+' bedeutet eins oder mehrere und wird auf '[0-9.]' Angewendet. Das '?' Bedeutet keines oder eins und wird auf '(dstport = [0-9] + service = \ w +)' angewendet. – rdupz

+0

Wow das ist Arbeit gut, aber das + was ist das für und auch (dstport = [0-9] + service = \ w +)? ... das() .. \ w + ... und das Fragezeichen ... Manchmal kommt noch Service vor dstport. Gibt es irgendwelche Arbeit für das ... danke –

+0

der Grep, wenn die Zeile nicht [dstport = xx] wie in der ersten Zeile der Datei, die ich gesendet, es wird nur die [dstip] und ignorieren [Service = KLINGELN]. Auch wenn ich die Ausgabe an eine Datei sende, druckt es keine neuen Zeilen. –

Verwandte Themen