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 GNU Discussion :

Grep / Expression rationnelles


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 8
    Par défaut Grep / Expression rationnelles
    Bonjour,

    Petite incompréhension... j'espère que quelqu'un pourra m'éclairer, parce que la je sèche

    J'ai un fichier contenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    333
    4444zerfrg
    azerty111
    J'aimerais afficher à l'aide d'une commande grep, uniquement les lignes contenant une suite de 3 chiffres.

    J'ai d'abord commencer avec cette commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -E '[0-9]{3}' monfichier
    qui me renvoie le contenue entier de mon fichier.

    Il me semblait pourtant que le fait de mettre le quantifieur {n} indique que je veut exactement n fois quelque chose et pas plus.

    J'ai donc par la suite essayé de rajouter des contraintes mais sans grand succès
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    grep -E '[^0-9]*[0-9]{3}[^0-9]*' monfichier
    grep -E '[0-9]{3}[a-z]*' monfichier
    J'ai l'impression d'avoir loupé quelque chose.... c'est frustrant

    Merci d'avance pour votre aide.

  2. #2
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Bonjour,

    Il ne s'agit pas simplement de demander: "afficher toutes les lignes contenant 3 chiffres", mais "afficher toutes les lignes ne contenant que trois chiffres". C'est-à-dire commençant par un chiffre et terminant par un chiffre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -E "^[0-9]{3}$" fichier

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 8
    Par défaut
    merci pour la réponse...

    J'ai peut être mal posé mon problème, ce que je voudrais c'est afficher toutes les lignes contenant une suite de 3 chiffres.

    donc les lignes :

  4. #4
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Le problème est effectivement différent. La contrainte devient donc: "toutes les lines contenant zéro ou plus caractère(s) non-numérique(s), puis trois chiffres, puis zéro ou plus caractère(s) non-numérique(s)". Ce qui donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -E "^[^0-9]*[0-9]{3}[0-9]*$" fichier

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 8
    Par défaut
    Super merci beaucoup !!!!!

    Si je peut abuser de votre temps, je ne comprend pas pourquoi cette formule nécessite de marquer le début ^ et la fin $ de la chaîne ???

  6. #6
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Il est important de comprendre afin d'éviter de reposer la même question plus tard, non?

    C'est une question de logique: Entre le début de ligne et le premier chiffre du nombre à trois chiffres, il ne doit y avoir aucun chiffre (désolé pour les répétitions). Donc, si l'on ne met pas "^" au début, l'interpréteur cherchera une suite (entre 0 et n) de caractères non-numériques à partir de n'importe où, et par exemple juste après un chiffre parasite. Idem pour les caractères après le nombre à trois chiffres.

    J'espère que c'est clair...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] Expression rationnelle
    Par Shadow aok dans le forum Langage
    Réponses: 15
    Dernier message: 28/12/2005, 17h29
  2. Non ambiguïté d'expressions rationnelles
    Par David.Schris dans le forum Algorithmes et structures de données
    Réponses: 22
    Dernier message: 27/12/2005, 16h11
  3. [RegEx] Images et expression rationnelle
    Par Invité dans le forum Langage
    Réponses: 7
    Dernier message: 30/10/2005, 15h50
  4. Réponses: 2
    Dernier message: 21/02/2005, 10h42
  5. [langage] Expressions rationnelles (perl/C)
    Par ma2th dans le forum Langage
    Réponses: 11
    Dernier message: 02/08/2004, 18h07

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