Mit der folgenden grep
Syntax möchte ich alle IP-Adressen in einer Datei (aus einem ksh
Skript) abgleichen
grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' file
Das Problem: Es werden auch Wörter (IP) mit mehr als 4 Oktetten gefunden:
1.1.1.1.1
oder
192.1.1.1.160
Wie kann ich eine gültige IP und nur IP-Adressen mit 4 Oktetten abgleichen? Ich kann auch Perl verwenden - eine einzeilige Syntaxlösung, falls grep
dies nicht funktioniert.
regex
grep
ip-address
jennifer
quelle
quelle
999.999.999.999
.192.1.4097
sie von Linux glibc und Windows akzeptiert werden, gültig.ping 2130706433
, Auf OS X:PING 2130706433 (127.0.0.1): 56 data bytes
.0x7f.1
und0177.1
Antworten:
Versuche dies:
das passt zu allen Ausdrücken von
0.0.0.0
bis999.999.999.999
mit
Sie erhalten nur IP-Adressen
hinweis:
auf solaris erledigt egrep wahrscheinlich die arbeit .
quelle
grep -E <pattern> <file>
(oder, um nur die Übereinstimmungen auszudrucken:grep -Eo <pattern> <file>
1.1.1.1.1
aber es verbirgt das Letzte.1
von der Ausgabe. Ich kann nicht sehen, wie es helfen kann.Wie ist das:
quelle
192.1.1.1.160
als zurück192.1.1.1
, was meiner Meinung nach für den Fragesteller in Ordnung ist.)Das
Wenn
grep
Sie diese Option aktivieren, wird die Übereinstimmung nur an Wortgrenzen hergestellt. Dies bedeutet, dass Ihre Übereinstimmung entweder von Leerzeichen umgeben sein muss oder am Anfang / Ende der Zeile beginnen / enden muss.quelle
Um nur Übereinstimmungen mit genau 4 Oktetten zu finden (ausgenommen 1.1.1.1.1), verwenden Sie Folgendes:
Es sollte niemals Nicht-IP-Adressen erkennen. Der Ausdruck könnte komplexer sein, um mehr Dinge zu überprüfen, aber dies sollte in den meisten Fällen funktionieren. Es stimmt nicht mit einer vorhergehenden 0 überein, da 010.1.12.1 keine übliche Methode zum Schreiben von IP-Adressen ist.
quelle
quelle
Ein bisschen knifflig, aber es sollte funktionieren:
quelle
127.000.000.001
dann ;-)ping 127.000.000.001
funktioniert sicher auf meinem Mac. Aber dann: Ich habe gerade erfahren, dass sogarping 2130706433
das gleiche Ergebnis erzielt wird. :-) Ups,ping 00127.00000.00000.00001
übersetzt nach87.0.0.1
. Seltsam ... oder oktal vielleicht? Ja, oktal, also haben Sie Recht, wenn es um führende Nullen geht.Geänderte Fassung der Antwort von Arnaud B..
Dieser Ausdruck stimmt nicht mit IP-Adressen mit führenden Nullen überein. Beispiel: Es stimmt nicht mit 192.168.1.01 überein. Dieser Ausdruck stimmt nicht mit IP-Adressen mit mehr als 4 Oktetten überein. Beispiel: Es stimmt nicht mit 192.168.1.2.3 überein
quelle
Ich verwende
egrep "^([0-9]{1,3}\.){3}[0-9]{1,3}" /etc/hosts
, um IP-Adressen am Anfang einer Zeile abzugleichen. Es kann auch verwendet werden, ohne^
Leerzeichen oder andere Zeichen vor der IP-Adresse zuzulassen.quelle
Eine kürzere Version des langen Regex:
Bitte verwenden Sie grep -E oder egrep entsprechend Ihrer Betriebssystemversion
quelle
echo "8.8.8.8" | grep -Eo '([1-2][0-9]{0,2}\.){3,3}[1-2][0-9]{0,2}'
=> no resultgrep -Eo '([0-9] {1,3}.?) {4}'
Beispiel: locken http://korben.info/ip | grep "IP visible depuis mon serveur" | grep -Eo '([0-9] {1,3}.?) {4}'
quelle
Regulärer Ausdruck zum Abgleichen einer IP-Adresse in TCL
quelle
Folgendes hat für mich bei ksh und ksh93 unter AIX funktioniert:
ip =
[[$ ip == [0-9] @ ("" | [0-9]) @ ("" | [0-9]). [0-9] @ ("" | [0-9]) @ ("" | [0-9]). [0-9] @ ("" | [0-9]) @ ("" | [0-9]). [0-9] @ ("" | [0-9]) @ ("" | [0-9])] && echo OK || echo NOK Das obige kann modifiziert werden, um die bereitgestellte IP nach dem gewünschten Muster zu "filtern".
quelle