Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/10/2007, 08h34   #1
Membre expérimenté
 
Étudiant
Inscription : juillet 2004
Messages : 777
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2004
Messages : 777
Points : 527
Points : 527
Par défaut [Bash] Expression reguliere avec expr match

Bonjour,
Je rencontre un soucis avec une expression régulière que je veut faire avec expr match.
C'est ceci:
Code :
expr match "$1" "^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$"
Ou $1 contient une adresse ip (ex: 192.168.0.1), et je voudrai bien grouper la fin du style "^[0-9]\{1,3\}\(\.[0-9]\{1,3\}\)\{3\}$" mais les parenthèse capture :S

Comment faire merci?
Le but bien sur étant de vérifier que l'ip entrée est valide
cerede2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2007, 09h05   #2
Modérateur
 
Avatar de ggnore
 
Inscription : juillet 2004
Messages : 2 246
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : juillet 2004
Messages : 2 246
Points : 1 904
Points : 1 904
Je ne comprends pas ton problème :
Citation:
les parenthèses capture
ça veut dire quoi ?

Code :
1
2
3
4
5
6
bla@info1:~ $ bla=1.1.2.3
bla@info1:~ $ echo $bla | grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$"
1.1.2.3
bla@info1:~ $ bla=255.255.255.255
bla@info1:~ $ echo $bla | grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$"
255.255.255.255

A partir de bash 3, tu peux faire :
Code :
1
2
3
bash -version
GNU bash, version 3.1.17(1)-release (i486-pc-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
__________________
Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
ggnore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2007, 17h07   #3
Membre expérimenté
 
Étudiant
Inscription : juillet 2004
Messages : 777
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2004
Messages : 777
Points : 527
Points : 527
J'aurai voulut simplifier ma Regex, à la manière de ce que l'on peut faire d'habitude mais bon la quand je met des parenthèse au lieu de me donner le nombre de truc qui corresponde, ca me renvoi la partie qui est capturé dans les parenthèse et je ne veut pas
cerede2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2007, 21h52   #4
Membre expérimenté
 
Avatar de BlaireauOne
 
Inscription : mars 2007
Messages : 469
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2007
Messages : 469
Points : 576
Points : 576
C'est le comportement normal de expr

Solution avec grep :

Code :
1
2
3
4
5
6
7
8
 
echo  $ip
192.168.0.1
 
if [[ $(echo  $ip  | grep -c "^[0-9]\{1,3\}\(\.[0-9]\{1,3\}\)\{1,3\}$") -eq 1 ]] ; then
    echo "ok"
fi
ok
http://man.developpez.com/man1/expr.1.php
Code :
1
2
3
4
5
6
7
:    Effectue une recherche de sous-chaîne. Les arguments sont considérés comme des chaînes. 
Le second est une expression rationnelle avec un `^' ajouté implicitement au début. 
Le premier argument est comparé à ce motif. 
Si la correspondance réussit, et si une partie de la chaîne est encadrée par `\(' et `\)', cette partie sera renvoyée comme valeur de l'expression :. 
Sinon l'opération renvoie un entier représentant le nombre de caractères mis en correspondance. 
Si la comparaison échoue, l'opérateur : renvoie une chaîne nulle si l'encadrement `\(' et `\)' est utilisé, et renvoie 0 sinon. On ne peut utiliser qu'un seul encadrement `\(' et `\)'. 
__________________
Loi de Murphy:
La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.
BlaireauOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2007, 14h41   #5
Membre expérimenté
 
Étudiant
Inscription : juillet 2004
Messages : 777
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2004
Messages : 777
Points : 527
Points : 527
Ah ok merci pour la réponse
cerede2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h18.


 
 
 
 
Partenaires

Hébergement Web