Ich habe eine große Textdatei, aus der ich Datenzeilen extrahieren möchte. Ich möchte jede Zeile extrahieren, die eine IP-Adresse enthält, die ich angeben kann (zzzz).
2015-02-26 00:00:00 Local3.Info x.x.x.x Feb 26 05:19:52 y.y.y.y 00:05:06:17 , C8:D7:19:61:D1:9B DHCP REQ: Valid IP->Valid IP
2015-02-26 00:00:00 Local3.Info x.x.x.x Feb 26 05:32:56 y.y.y.y 00:0D:8A:80 , 48:F8:B3:54:43:EB DHCP REQ: Valid IP->Valid IP
2015-02-26 00:00:00 Local5.Notice x.x.x.x Feb 26 05:32:56 z.z.z.z BTS Sending CDR: 067,H,00:F0:3A:99,00:0D:8A:80,48:F8:B3:54:43:EB,z.z.z.z,10780,906
2015-02-26 00:00:00 Local3.Info x.x.x.x Feb 26 05:32:56 y.y.y.y 00:0D:8A:80 , 48:F8:B3:54:43:EB DHCP ACK: Valid IP->Valid IP: y.y.y.y
2015-02-26 00:00:00 Local5.Notice x.x.x.x Feb 26 05:00:11 z.z.z.z AAA: Modulation Change to 16QAM recvd from 00:16:C4:ED
Die Ausgabe in der neuen Datei würde also folgendermaßen aussehen
2015-02-26 00:00:00 Local5.Notice x.x.x.x Feb 26 05:32:56 z.z.z.z BTS Sending CDR: 067,H,00:F0:3A:99,00:0D:8A:80,48:F8:B3:54:43:EB,z.z.z.z,10780,906
2015-02-26 00:00:00 Local5.Notice x.x.x.x Feb 26 05:00:11 z.z.z.z AAA: Modulation Change to 16QAM recvd from 00:16:C4:ED
Für jede Hilfe wäre ich sehr dankbar! Vielen Dank im Voraus
Antwort1
Sie sollten in der Lage sein,grep
grep -F 'z.z.z.z' logfile > results
Das Argument -F
( --fixed-strings
) verhindert, dass die Punkttrennzeichen mit der Syntax regulärer Ausdrücke (die mit „jedem Zeichen“ übereinstimmen würde) interpretiert werden, sondern als wörtliche Punkte.
Antwort2
Sie können grep oder awk verwenden.
grep 'z.z.z.z' your_file
awk hat mehr Optionen
awk '/z.z.z.z/ {print}' your_file
aber awk kann mehr Formatierungen und hat mehr Optionen
Und
http://www.grymoire.com/Unix/Awk.html
für Details
Es gibt jede Menge anderer Optionen, Perl würde auch funktionieren ...
Antwort3
Hat es jemand verpasst sed
? Hier ist es:
sed -i.bak '/z\.z\.z\.z/!d' file.txt
Die Originaldatei wird als „file.txt.bak“ gesichert und die geänderte Datei als „file.txt“. Wenn Sie die Originaldatei nicht sichern möchten:
sed -i '/z\.z\.z\.z/!d' file.txt
Wenn Sie die Ausgabe nur drucken und nicht speichern möchten:
sed '/z\.z\.z\.z/!d' file.txt
Antwort4
Perl-Alternative:
$ perl -lane 'print if /z.z.z.z/' < input.txt
2015-02-26 00:00:00 Local5.Notice x.x.x.x Feb 26 05:32:56 z.z.z.z BTS Sending CDR: 067,H,00:F0:3A:99,00:0D:8A:80,48:F8:B3:54:43:EB,z.z.z.z,10780,906
2015-02-26 00:00:00 Local5.Notice x.x.x.x Feb 26 05:00:11 z.z.z.z AAA: Modulation Change to 16QAM recvd from 00:16:C4:ED