Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile

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).

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