Ich habe ein Skript, das einige Ausgaben generiert. Ich möchte diese Ausgabe auf eine IP-Adresse wie überprüfen
159.143.23.12
134.12.178.131
124.143.12.132
if (IPs are found in <file>)
then // bunch of actions //
else // bunch of actions //
Ist fgrep
eine gute idee
Ich habe Bash zur Verfügung.
shell-script
grep
ip
Koshur
quelle
quelle
0010.0000.0000.0001
? Darf die Datei ansonsten Dinge enthalten, die wie IP-Adressen aussehen, wie Versionsnummern (soft-1.2.1100.1.tar.gz
, Netzwerkspezifikationen (10.0.0.0/24), 1.2.3.4.5)? Würden Sie eine Lösung akzeptieren, die positiv auf 333.444.555.666 ist? Oder0377.0377.0377.0377
(eine gültige vieroktale IP-Adresse)?bash
verfügbar, ist diesawk
normalerweise auchawk '/([0-9]{2,3}\.){3}/ {print $5 "\t" $1}'
der Fall , sodass dies für Sie möglicherweise funktioniert: (Dieser Einzeiler übersetzt die Ausgabe der Host-XFR-Liste in das/etc/hosts
Format.)Antworten:
Ja, Sie haben viele Optionen / Tools zur Verfügung. Ich habe es gerade versucht, es funktioniert:
ifconfig | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"
So können Sie
grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"
die IP-Adressen aus Ihrer Ausgabe abrufen.quelle
"\b([0-9]{1,3}\.){3}[0-9]{1,3}\/[0-9][0-9]?"
, um CIDRs zu finden (vorausgesetzt, sie sind gültig)Meine Antwort basierend auf dieser Antwort starten:
und die Antwort in IPv6 in voller Länge konvertieren, etc ...:
Wenn Sie das / nnn behalten möchten, wenn es dort ist:
und es gibt auch die verkürzte Version von IPv6, die '::' enthält.
Weitere IPv6-Antworten finden Sie hier: /programming/53497/regular-expression-that-matches-valid-ipv6-addresses
quelle
fgrep
ist der alte Name für eine Variantegrep
, die den Mustervergleich ignoriert. Ich würde empfehlen, stattdessengrep
(oder sogaregrep
) zu verwenden, zumal Sie eindeutig eine Mustererkennung wünschen.Wenn Ihre Datei zB aufgerufen wird
ips
, können Sie etwas schreiben wie:Dann können Sie die Parameter wie folgt dem Skript übergeben
quelle
Wenn Sie die Liste der IP-Adressen in einer Datei haben, hat eine pro Zeile
grep
bereits die bequeme-f
Option:Dies kann aufgrund von Zeichenfolgen, denen optional eine andere Nummer folgt, zu einigen Fehlalarmen führen, um eine andere IP-Adresse festzulegen. Viele Dinge, die Sie tun können, abhängig von Ihrem Fall, können Sie sich entscheiden, sich Sorgen zu machen oder nicht.
quelle
Getestet in SmartOS (eine Variante von Solaris), sollte hoffentlich in anderen * nix-Umgebungen funktionieren:
Beispiel:
Dieses Muster passt nur gültig IPv4, das heißt,
x.x.x.x
wox
0-255 liegen. Wenn Sie nur die übereinstimmende IP extrahieren müssen, fügen Sie-o
dem obigen Befehl eine Option hinzu. Sie können diesen Befehl in ein Bash-Skript und vermutlich auch in andere Shell-Skripte einbetten. Und wenn esegrep
fehlschlägt,try grep -E ...
Verwendung in einem (Bash-) Shell-Skript:
ip=$(egrep -o '(([0-9]|[0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])' file.txt) echo $ip
quelle
Ich denke, meine Antwort auf einen anderen Beitrag ist hier besser geeignet. Dank dieses Beitrags und anderer, die es mögen, habe ich mir das ausgedacht, das nach dem richtigen IP-Format sucht und dann alle Zeilen beseitigt, die 256 oder mehr enthalten. Ersetzen Sie die IP durch eine ungültige, um stattdessen keine Ausgabe zu erhalten:
Das erste grep wurde wahrscheinlich in diesem Beitrag gefunden und überprüft, ob Zahlen von 0-999 im Format XXXX vorliegen
Das zweite grep entfernt Zeilen mit den Nummern 256-999, so dass nur gültige Format-IPs übrig bleiben, dachte ich
ABER ... Wie von G-Man ausgeführt, habe ich zu Unrecht angenommen, dass die IP in einer eigenen Leitung ist. Meistens muss jedoch auf beiden Seiten der IP nach einem Leerzeichen oder einem anderen Teiler gesucht werden. Die Leerzeichen / Teiler können mit sed oder anderen Mitteln entfernt werden, nachdem die IP gefunden wurde. Ich habe auch -o zum ersten grep hinzugefügt:
Der erste gibt keine Ausgabe aus, während der zweite dies tut und die Leerzeichen entfernt werden.
quelle
grep
würde diese Zeile wegen der "500" werfen. (In der Frage wurde nie angegeben, dass die IP-Adresse (n) in der Datei, falls vorhanden, in einer eigenen Zeile stehen.) Auf der anderen Seite werden 1234.1.1.1 und 1.1.1.1234 akzeptiert. Aber davon abgesehen nicht schlecht.Leiten Sie diese Ausgabe auf einige um
outputFile
Einfach
grep
mit Muster wie,quelle
.
es sich um einen Operator für reguläre Ausdrücke handelt und ein Escapezeichen erforderlich ist, damit er buchstäblich behandelt wirdquelle