IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes POSIX Discussion :

Expression régulière : Opérateur d'alternation ' or '


Sujet :

Shell et commandes POSIX

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 5
    Par défaut Expression régulière : Opérateur d'alternation ' or '
    Aide sur commande unix SVP?
    bonsoir,
    donc voila, je veux savoir comment minimiser la portée de l’opérateur d’alternation " | " des expressions régulières par ligne.

    Exemple:

    ^[a-z]\|[A-Z]$: les lignes qui se terminent avec Majuscule
    ou les lignes qui commencent par une minuscule

    je veux faire un truc genre ^([a-z]\|[A-Z])$ pour que la portée de ' | ' se termine à la parenthèse et non jusqu’à la fin de la ligne. ce qui donnera " une ligne d'un seul caractère minuscule ou majuscule " , je sais que c'est faisable autrement dans cet exemple.
    j'espère que je me suis fait comprendre.
    je vous remercie d'avance pour votre aide, je suis débutant.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946

  3. #3
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonjour.

    ce qui donnera " une ligne d'un seul caractère minuscule ou majuscule "
    Avec des exemples c'est mieux... de ce que je comprends, tu as donc des lignes qui commencent forcemment par une minuscule ou majuscule c'est ça ? Et le reste ça peut être n'importe quoi (y compris des minuscules et majuscules ?) ?

    Exemple de pattern : '^[A-Za-z]{1}'Ce pattern fonctionnera pour les lignes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    A1234567
    TOTO
    bA23!A89
    Etc
    Ce pattern ne fonctionnera pas pour ces lignes par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    1234567
    1azerty
    23AYAYA
    Bref, un peu plus de précisions sur ce que tu attends avec des exemple seraient les bienvenues.

    Cordialement,
    Idriss

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 5
    Par défaut
    j'ai trouvé, merci.
    En fait j'avais un fichier autos qui avait cette forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Verseau;192.168.1.2;E5:RJ:MP:H5:JY:48:5N:91;verseau.domain.ma
    Scorpion;10.18.1.2;84:PK:5P:MP:8Y:4A:K5:FG;scorpion.gmail.com
    ...
    et je voulais citer les ordinateurs avec une adresse IP de classe A:
    donc j'avais besoin de savoir comment utiliser l’opérateur d’alternation 'or'.

    j'avais juste besoin de parenthèses ( ) pour minimiser la portée de l’opérateur |
    au final j'ai eu cela comme résultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat autos | sed -n -e '/^[^;]*;[0]\?[0-1]\?[0-9]\.\([0-1]\?[0-9]\?[0-9]\|2[0-5][0-5]\).\([0-1]\?[0-9]\?[0-9]\|2[0-5][0-5]\).\([0-1]\?[0-9]\?[0-9]\|2[0-5][0-5]\);*/ , /^[^;]*;\(1[0-1][0-9]\|12[0-7]\).\([0-1]\?[0-9]\?[0-9]\|2[0-5][0-5]\).\([0-1]\?[0-9]\?[0-9]\|2[0-5][0-5]\).\([0-1]\?[0-9]\?[0-9]\|2[0-5][0-5]\);*/p'

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Remarque: Il manque un backslash '\' devant tes 2ème 3ème 5ème et 6ème points:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat autos | sed -n -e '/^[^;]*;[0]\?[0-1]\?[0-9]\.\([0-1]\?[0-9]\?[0-9]\|2[0-5][0-5]\)\.\([0-1]\?[0-9]\?[0-9]\|2[0-5][0-5]\)\.\([0-1]\?[0-9]\?[0-9]\|2[0-5][0-5]\);*/ , /^[^;]*;\(1[0-1][0-9]\|12[0-7]\).\([0-1]\?[0-9]\?[0-9]\|2[0-5][0-5]\)\.\([0-1]\?[0-9]\?[0-9]\|2[0-5][0-5]\)\.\([0-1]\?[0-9]\?[0-9]\|2[0-5][0-5]\);*/p'
    Remarque: pour simplifier la lecture, le debug et l'évolution de la regexp (que tu as probablement confectionnée à coups de copier/coller), tu peux la fractionner explicitement (en choisissant des noms qui ont un sens!):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    field1='^[^;]*'
    mask1='[0]\?[0-1]\?[0-9]'
    mask2='\([0-1]\?[0-9]\?[0-9]\|2[0-5][0-5]\)'
    cat autos | sed -n -e "/${field1};${mask1}\.${mask2}\.${mask2}\. etc."

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 376
    Par défaut
    Bonjour,

    Une nouvelle adresse de classe A ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Scorpion;10.18.1.2555555;84:PK:5P:MP:8Y:4A:K5:FG;scorpion.gmail.com
    En fait l'erreur de la regex est très courante (a cause du faux amis "grep" ), il suffit de remplacer les 2 ";*" par ";\+" ou plus simplement ';'.
    Pour explication (pour ceux qui ne le savent pas), le '*' veut dire en mode regex:
    je veux au moins 0 fois la classe de caractère qui se trouve immédiatement sur ma gauche, donc ici, je veux au moins 0 fois le ';'.

    Cordialement.

Discussions similaires

  1. [RegEx] Expression régulières : Balises <SCRIPT>
    Par Gwipi dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2006, 23h25
  2. Expression réguliére
    Par Mad_Max dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 16/09/2003, 18h17
  3. [expression régulière] mon cerveau fait des noeuds..
    Par nawac dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 27/05/2003, 10h06
  4. Expressions réguliéres
    Par Tooms dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2002, 18h42
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo