Avec la grep
syntaxe suivante, je veux faire correspondre toutes les adresses IP d'un fichier (à partir d'un ksh
script)
grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' file
Le problème: il correspond également aux mots (IP) de plus de 4 octets:
1.1.1.1.1
ou
192.1.1.1.160
Comment faire correspondre une adresse IP valide et uniquement des adresses IP de 4 octets? Je peux aussi utiliser Perl - une solution de syntaxe sur une ligne, si grep
cela ne fonctionne pas.
regex
grep
ip-address
Jennifer
la source
la source
999.999.999.999
aussi.192.1.4097
valides et acceptées par Linux glibc et Windows.ping 2130706433
, Sur OS X:PING 2130706433 (127.0.0.1): 56 data bytes
.0x7f.1
et0177.1
Réponses:
essaye ça:
qui correspond à toutes les expressions de
0.0.0.0
à999.999.999.999
avec
vous obtiendrez des adresses IP seulement
note:
sur solaris probablement egrep fera le travail.
la source
grep -E <pattern> <file>
(ou, pour simplement imprimer les correspondances:grep -Eo <pattern> <file>
1.1.1.1.1
mais le dernier masque.1
de la sortie, je ne vois pas en quoi cela peut aider.Comment c'est:
la source
192.1.1.1.160
comme192.1.1.1
, ce qui, à mon avis, convient à l'interrogateur.)le
flag to
grep
fait en sorte qu’il ne corresponde qu’aux limites de mots, ce qui signifie que votre correspondance doit être entourée d’espaces ou bien commencer / terminer au début / à la fin de la ligne!la source
Pour ne trouver que des correspondances de 4 octets exactement (à l'exception de choses comme 1.1.1.1.1), utilisez ceci:
Il ne devrait jamais détecter d’adresses non-IP. L'expression pourrait être plus complexe pour vérifier plus de choses, mais cela devrait fonctionner dans la plupart des cas. Il ne correspondra pas à un 0 précédent car 010.1.12.1 n'est pas un moyen courant d'écrire des adresses IP.
la source
la source
Un peu délicat, mais ça devrait marcher:
la source
127.000.000.001
alors? ;-)ping 127.000.000.001
ça marche sûrement sur mon Mac. Mais alors: je viens d’apprendre que celaping 2130706433
donne même le même résultat. :-) Oups,ping 00127.00000.00000.00001
traduit en87.0.0.1
. Bizarre ... ou octal peut-être? Oui, octal bien sûr, alors vous avez raison de deviner des zéros, je suppose.Version modifiée de la réponse d'Arnaud B.
Cette expression ne fera pas correspondre les adresses IP avec les 0 premiers. Par exemple, elle ne correspondra pas à 192.168.1.01 Cette expression ne correspondra pas aux adresses IP de plus de 4 octets. par exemple, il ne correspondra pas à 192.168.1.2.3
la source
J'utilise
egrep "^([0-9]{1,3}\.){3}[0-9]{1,3}" /etc/hosts
pour faire correspondre les adresses IP au début d'une ligne. Il peut également être utilisé sans^
pour autoriser les espaces ou autres caractères avant l'adresse IP.la source
Une version plus courte de la longue expression régulière:
Veuillez utiliser grep -E ou egrep en fonction de la version de votre système d'exploitation.
la source
echo "8.8.8.8" | grep -Eo '([1-2][0-9]{0,2}\.){3,3}[1-2][0-9]{0,2}'
=> pas de résultatgrep -Eo '([0-9] {1,3}.?) {4}'
Exemple: curl http://korben.info/ip | grep "IP visible depuis mon serveur" | grep -Eo '([0-9] {1,3}.?) {4}'
la source
Expression régulière pour faire correspondre une adresse IP dans TCL
la source
Voici ce qui a fonctionné pour moi pour ksh et ksh93 sous AIX:
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 Ce qui précède peut être modifié afin de "filtrer" l’adresse IP fournie selon le modèle souhaité.
la source