Scripting-Hilfe zum Herausfiltern einer IP-Adresse

Scripting-Hilfe zum Herausfiltern einer IP-Adresse

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

sehenhttps://www.digitalocean.com/community/tutorials/wie-man-die-awk-sprache-unter-linux-zum-manipulieren-von-text-verwendet

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

verwandte Informationen