Pages : 1
#1 Le 16/10/2013, à 11:40
- pascalbout
[resolu] recherche d'IP
bonjour
j'ai besoin de rechercher une IP (de 2 à 3 digits, soit par exemple aa.bbb.cc.ddd ou encore aaa.bbb.cc.dd) dans une chaine de caractere de plusieurs lignes, parfois cette chaine tient sur 20 lignes !
j'ai essayé par awk, mais ce qu'il y a devant l'IP est variable, je ne peux donc pas utiliser awk -F"toto"
Comment faire, avec des regex je suppose, pour "détecter" une IP dans une grande chaine, et la sortir ?
merci
Dernière modification par pascalbout (Le 16/10/2013, à 15:52)
Hors ligne
#2 Le 16/10/2013, à 12:05
- genma
Re : [resolu] recherche d'IP
http://www.commentcamarche.net/faq/911- … adresse-ip
L'expression régulière suivante combinée à la commande voulue (grep, sed, etc.) fait l'affaire :
([0-9]{1,3}\.){3}[0-9]{1,3}
Explications
Interprétation du motif
([0-9]{1,3}\.){3} : un nombre composé de un à trois chiffres suivis d'un point, le tout répété trois fois.
[0-9]{1,3} : un nombre composé de un à trois chiffres.
Est-ce que ça t'aide?
"Lorsque tu as découvert le libre, tu sais que tu ne pourras plus jamais revenir en arrière".
Utilisateur d'Ubuntu depuis la version 4.10 !
Mon blog ? https://blog.genma.fr
Mon twitter? http://twitter.com/genma
Hors ligne
#3 Le 16/10/2013, à 12:25
- pingouinux
Re : [resolu] recherche d'IP
Bonjour,
Chaque adresse IP est-elle sur une seule ligne ?
Si oui, ceci devrait convenir, i étant le fichier contenant les IP, et s étant une variable contenant la chaîne de caractères :
sed -rn 's/.*\b(([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}\b).*/\1/p' i
ou
s=$(cat i)
sed -rn 's/.*\b(([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}\b).*/\1/p' <<<"$s"
Hors ligne
#4 Le 16/10/2013, à 14:27
- pascalbout
Re : [resolu] recherche d'IP
merci pour ces infos
j'ai essayé:
s=$(cat i)
sed -rn 's/.*\b(([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}\b).*/\1/p' <<<"$s"
ça marche impeccable sauf que........... dans la chaine de caractere, j'ai des numeros de version qui apparaissent tels que :
-1.6.5.132.jar
du coup il me sort : 1.6.5.132
En revanche du coté des IP, j'ai un blanc à la fin, et parfois devant (blanc, -l ou -b ou un = ):
-l 10.133.64.158
ou
=10.133.64.158
ou
-b 10.133.64.158
peut on modifier la regex si dessus afin de ne sortir que la suite de digit avec un espace à la fin, et l'un de ces caractere devant ( blanc ou = ) ?
Dernière modification par pascalbout (Le 16/10/2013, à 14:46)
Hors ligne
#5 Le 16/10/2013, à 15:02
- pingouinux
Re : [resolu] recherche d'IP
Pour ne détecter ce qui ressemble à une IP que si c'est précédé d'un espace ou de =, et suivi d'un espace :
sed -rn 's/.*[ =](([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}) .*/\1/p' <<<"$s"
Hors ligne
#6 Le 16/10/2013, à 15:04
- pascalbout
Re : [resolu] recherche d'IP
génial ça marche !
grand merci
Hors ligne
#7 Le 16/10/2013, à 23:36
- tiramiseb
Re : [resolu] recherche d'IP
Salut,
Attention, la RFC décrivant la syntaxe des adresses IP est assez complexe et une IP ce n'est pas obligatoirement aaa.bbb.ccc.ddd (notamment, la notation "aaa.ddd" est tout à fait valable pour la norme, et ça devient "aaa.0.0.ddd" si je me rappelle bien).
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#8 Le 17/10/2013, à 05:15
- pingouinux
Re : [resolu] recherche d'IP
Le sed que j'ai proposé en #3 ou #5 ne détecte effectivement que la forme habituelle aaa.bbb.ccc.ddd.
Hors ligne