OVH Cloud OVH Cloud

expr est expression reguliere

7 réponses
Avatar
Ravach0l
Bonjour

j'ai un probleme d'expression reguliere avec expr. En fait j'essaye de
controler la validite d'une adresse ip et d'une adresse mac dans un script.

expr match 192.168.0.1 "/^(\d+\.){3}\d+$/"

renvoit 0

expr match "00:00:00:00:00:00" "/^([:xdigits:]{2}\:){5}[:xdigits:]{2}$/"

renvoit 0

comment faire pour que ca marche?

Merci d'avance pour votre reponse

7 réponses

Avatar
Laurent Wacrenier
Ravach0l écrit:
j'ai un probleme d'expression reguliere avec expr. En fait j'essaye de
controler la validite d'une adresse ip et d'une adresse mac dans un script.

expr match 192.168.0.1 "/^(d+.){3}d+$/"

renvoit 0

expr match "00:00:00:00:00:00" "/^([:xdigits:]{2}:){5}[:xdigits:]{2}$/"

renvoit 0

comment faire pour que ca marche?


Retirer les //, ne pas utiliser d, utiliser ( ) pour les groupes,
ne pas utiliser de {} (ce sont les expressions basiques).
Utiliser la syntaxe "expr chaine : regexp".

Avatar
Ravach0l
Retirer les //, ne pas utiliser d, utiliser ( ) pour les groupes,
ne pas utiliser de {} (ce sont les expressions basiques).
Utiliser la syntaxe "expr chaine : regexp".


Si je comprend bien la commande expr, tout comme sed, et grep n'implemente
pas la totalite des possibilites que permettent les expressions regulieres.
Je commence a comprendre pourquoi aucune de mes expression ne marche.

Avatar
Laurent Wacrenier
Ravach0l écrit:

Retirer les //, ne pas utiliser d, utiliser ( ) pour les groupes,
ne pas utiliser de {} (ce sont les expressions basiques).
Utiliser la syntaxe "expr chaine : regexp".


Si je comprend bien la commande expr, tout comme sed, et grep n'implemente
pas la totalite des possibilites que permettent les expressions regulieres.
Je commence a comprendre pourquoi aucune de mes expression ne marche.


Les possibilités sont les mêmes à peu de choses près, mais c'est la
syntaxe basique et non la syntaxe étendue.


Avatar
ts
"R" == Ravach0l writes:






R> expr match 192.168.0.1 "/^(d+.){3}d+$/"

Vous avez fait trop de perl ...

Pour compléter une autre réponse, pour certains un*x ceci marche

moulon% expr match 192.168.0.1 '([[:digit:]]+.){3}[[:digit:]]+$'
0.
moulon%

cf {} et +


--

Guy Decoux





Avatar
Ravach0l
Pour ceux que ca interesse voila deux fonctions shell pour savoir si une
adresse ip ou une adresse mac est valide :

# fonction de validation de l'ip
function validip {
IP=$1
#PTN='[0-9][0-9]*.[0-9][0-9]*.[0-9][0-9]*.[0-9][0-9]*$'
PTN='[0-9]{1,3}*.[0-9]{1,3}*.[0-9]{1,3}*.[0-9]{1,3}*$'

if [[ $(expr $IP : $PTN) -gt 0 ]] ; then
return 0 # true
else
return 1 # false
fi
}


# validation de l'adresse mac
function validmac {
MAC=$1

PTN='[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{
2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}$'

if [[ $(expr $MAC : $PTN) -gt 0 ]] ; then
return 0 # true
else
return 1 # false
fi
}
Avatar
Laurent Wacrenier
Ravach0l écrit:
Pour ceux que ca interesse voila deux fonctions shell pour savoir si une
adresse ip ou une adresse mac est valide :

# fonction de validation de l'ip
function validip {
IP=$1
#PTN='[0-9][0-9]*.[0-9][0-9]*.[0-9][0-9]*.[0-9][0-9]*$'
PTN='[0-9]{1,3}*.[0-9]{1,3}*.[0-9]{1,3}*.[0-9]{1,3}*$'

if [[ $(expr $IP : $PTN) -gt 0 ]] ; then
return 0 # true
else
return 1 # false
fi
}


ça ne vérifie pas 127.1, 127.0.1 ou 2130706433 (localhost)
ni 127.2560 (aka 127.0.10.0)
mais ça vérifie 999.999.999.999

Avatar
Nicolas George
"Ravach0l" wrote in message <42e606ec$0$15184$:
expr match 192.168.0.1 "/^(d+.){3}d+$/"
^ ^ ^ ^

Pour compléter les autres réponses, je signalerais volontiers qu'attendre
qu'un backslash et un dollar soient passés verbatim dans une chaîne de
guillemets doubles est casse-gueule. Utiliser des guillemets simples dans
cette situation.