Mit welchem regulären Ausdruck kann ich eine IP-Adresse abgleichen?

Mit der folgenden grep Syntax möchte ich alle IP-Adressen in einer Datei (aus einem ksh Skript)

  grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' file

Das Problem: Es stimmt auch mit Wörtern (IP) überein, die mehr als 4 Oktette haben:

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, wenn grep nicht funktioniert.

Author: slhck, 2010-10-24

13 answers

Versuche das:

grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /etc/hosts

Das alle Ausdrücke von 0.0.0.0 bis 999.999.999.999

Mit

grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /etc/hosts

Sie erhalten nur IP-Adressen

Hinweis:
auf Solaris wird wahrscheinlich egrep den Job machen.

 58
Author: udo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-09-13 12:46:11

Wie ist das:

perl -MRegexp::Common=net -ne '/($RE{net}{IPv4})/ and print "$1\n"' /etc/hosts
 11
Author: Joe Casadonte,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2010-10-24 13:50:10

Die

-w / --word-regexp 
Das Flag

Für grep stimmt nur an Wortgrenzen überein, was bedeutet, dass Ihre Übereinstimmung entweder von Leerzeichen umgeben sein muss oder am Anfang / Ende der Zeile beginnen / enden muss!

 5
Author: Dominik George,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-06-26 11:33:39

Um nur Übereinstimmungen mit 4 Oktetten genau zu finden (mit Ausnahme von Dingen wie 1.1.1.1.1), verwenden Sie Folgendes:

grep -P '(?<=[^0-9.]|^)[1-9][0-9]{0,2}(\.([0-9]{0,3})){3}(?=[^0-9.]|$)'

Es sollte niemals Nicht-IP-Adressen erkennen. Der Ausdruck könnte komplexer sein, um mehr Dinge zu überprüfen, aber dies sollte für die meisten Fälle funktionieren. Es stimmt nicht mit einer vorherigen 0 überein, da 010.1.12.1 keine übliche Methode zum Schreiben von IP-Adressen ist.

 5
Author: Stefan Seidel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-09-13 08:50:39
if [ ` echo $ip | '^((25[0-5]|2[0-4][0-9]|[01]?[1-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[1-9][0-9]?)$'  | grep -o "\." | wc -l` -eq 1 ];
then ipv4=true;
else 
ipv4=false;
 5
Author: Arnaud B.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-09-13 13:07:18

Ein wenig knifflig, aber es sollte funktionieren:

( X='\([0-9]\{1,2\}\|1[0-9]\{2\}\|2[0-4][0-9]\|25[0-5]\)' ; grep "\([^\.]\|^\)$X\.$X\.$X\.$X\([^\.]\|$\)" file )
 3
Author: cYrus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2010-10-24 15:30:37

Eine kürzere version des langen regex:

egrep '([1-2]?[0-9]{0,2}\.){3,3}[1-2]?[0-9]{0,2}' 

Bitte verwenden Sie grep-E oder egrep entsprechend Ihrer Betriebssystemversion

 1
Author: Suhail,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-11-17 09:56:08

Grep -E '^((25[0-5]|2[0-4][0-9]|[1]?[1-9][0-9]?).){3}(25[0-5]|2[0-4][0-9]|[1]?[1-9]?[0-9])$'

Modifizierte version von Arnaud B. ' s Antwort.

Dieser Ausdruck stimmt nicht mit IP-Adressen mit führenden 0s überein. z. B. stimmt er nicht mit 192.168.1.01 überein Dieser Ausdruck stimmt nicht mit IP-Adressen mit mehr als 4 Oktetten überein. zB wird es nicht mit 192.168.1.2.3

 0
Author: Thomas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-09-02 07:10:36

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 ohne ^ verwendet werden, um Leerzeichen oder andere Zeichen vor der IP-Adresse zuzulassen.

[0-9]{1,3} --> this matches a number between 1 and 999.
\. --> this is to add the dot.
([0-9]{1,3}\.){3} --> get a number with a dot 3 times.
[0-9]{1,3} --> finally add the fourth number.
 0
Author: Falk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-10-29 18:58:11

Grep -Eo '([0-9]{1,3}.?){4}'

Beispiel : curl - http://korben.info/ip | grep "IP visible depuis mon serveur" | grep -Eo '([0-9]{1,3}.?){4}'

 0
Author: user2357585,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-09-01 09:46:09

Regulärer Ausdruck zum Abgleichen einer IP-Adresse in TCL

Setze "192.168.10.25"

if {[regexp
{^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$} $a]} 
{
    puts "yes"
}
 0
Author: abhilash.malla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-03-20 11:54:31

Alte Kette, aber ich brauchte ein Grep, das AUCH CIDR-Masken (8-32), also benutze ich Folgendes:

grep -Eo "\b(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]\
|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\
([/]([8-9]|[12][0-9]|3[0-2]))?\b"

Das Obige kann verbessert werden;)

Wenn nun mask anders als 8-32 ist, aber der" IP-part "noch gültig ist, gibt grep den"IP-part" zurück.

 0
Author: Antti Lagus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-11-10 16:36:31

Hier ist, was für mich für ksh und ksh93 in AIX funktioniert hat:

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 geändert werden, um die bereitgestellte IP nach dem gewünschten Muster zu "filtern".

 -1
Author: Niko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-02-15 10:02:50