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 :

[HP-UX 11i] grep avec regexp


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 90
    Points : 111
    Points
    111
    Par défaut [HP-UX 11i] grep avec regexp
    Ola,

    Je suis à la recherche d'un grep qui me permettra de me donner toutes les lignes qui contiennent un nombre de 3 chiffres commençant par 5 (bref tout de 500 à 599).

    A titre d'exemple le fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >cat grep_test.txt
    osef
    pas 45189
    bien 524 et
    512 mais pas
    54268 en revanche
    il faut prendre 550
    et pas le reste
    Il faudrait donc que ma commande me retourne les lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    bien 524 et
    512 mais pas
    il faut prendre 550
    Si je fais simplement ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >grep '5[0-9][0-9]' grep_test.txt
    pas 45189
    bien 524 et
    512 mais pas
    54268 en revanche
    il faut prendre 550
    Ce n'est pas bon

    Il ne faut évidemment éviter les nombres qui terminent, commencent ou contiennent 5XX.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >grep '[^0-9]5[0-9][0-9][^0-9]' grep_test.txt
    bien 524 et
    mais je perd les lignes qui commencent ou finissent avec un 5XX.

    Donc je me suis dit qu'il fallait que mon 5XX soit le début d'une ligne ou précéder par un blanc, ou la fin d'une ligne ou suivi par un blanc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     >grep '[ ^]5[0-9][0-9][ $]' grep_test.txt
    bien 524 et
    Toujours pas

    Une idée ?

  2. #2
    Expert éminent

    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
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     grep -E '\b5[0-9]{2}\b'

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 90
    Points : 111
    Points
    111
    Par défaut a march' pô
    hmm... cela ne renvoie rien du tout.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     > grep -E '\b5[0-9]{2}\b' grep_test.txt
     >
    Pourtant quand je regarde la doc des regex via google, la réponse semble bonne vu que '\b' marque le début ou la fin d'un mot. Donc ton expression devrait donner n'importe quel mot commençant par 5, contenant 2 chiffres et qui se finit. Mais bon, cela ne fonctionne pas...

    pour info je tourne sous en environement Unix HP-UX Release 11i

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 90
    Points : 111
    Points
    111
    Par défaut ceci à l'air de fonctionner
    Au lieu d'essayer de trouver une seule regex qui me donne tout d'un coup, j'ai réussi avec 3 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     >grep -e '^5[0-9][0-9][^0-9]' -e '[^0-9]5[0-9][0-9][^0-9]' -e '[^0-9]5[0-9][0-9]$' grep_test.txt
    bien 524 et
    512 mais pas
    il faut prendre 550
    cela fonctionne, mais je ne peux pas m’empêcher de me dire qu'il y a moyen de le faire en une seule regex... et pas via une combinaison de 3...

  5. #5
    Expert éminent

    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
    Points : 6 276
    Points
    6 276
    Par défaut
    Citation Envoyé par rafuoner Voir le message
    hmm... cela ne renvoie rien du tout.
    pour info je tourne sous en environement Unix HP-UX Release 11i
    Ben forcément, j'aurai dû me douter

    Bon chez moi ça marche même avec "\<" et "\>" à la place de "\b" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    $ cat plop 
    osef
    pas 45189
    bien 524 et
    512 mais pas
    54268 en revanche
    il faut prendre 550
    et pas le reste
     
    $  grep -E '\b5[0-9]{2}\b' plop 
    bien 524 et
    512 mais pas
    il faut prendre 550
     
    $  grep -E '\<5[0-9]{2}\>' plop 
    bien 524 et
    512 mais pas
    il faut prendre 550
     
    $
    Sinon essaie de protéger les caractères spéciaux grep '\b5[0-9]\{2\}\b' en environnement de regex basiques...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $  grep  '\b5[0-9]\{2\}\b' plop 
    bien 524 et
    512 mais pas
    il faut prendre 550
     
    $

  6. #6
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 247
    Points : 473
    Points
    473
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    egrep "([^0-9]|^)5[0-9][0-9]([^0-9]|$)"
    fonctionne chez moi ...

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 90
    Points : 111
    Points
    111
    Par défaut nickel
    C'est pile-poil ce que je voulais.

    J'ignorais que l'on pouvait mettre des "ou" avec des | dans une expression régulière

    Super !

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

Discussions similaires

  1. Problème avec grep et regexp
    Par redvivi dans le forum Linux
    Réponses: 10
    Dernier message: 16/08/2008, 16h41
  2. Vérification de formulaire avec regexp
    Par Shadow aok dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 06/08/2007, 11h57
  3. Besoin d'aide avec Regexp::Assemble
    Par mobscene dans le forum Modules
    Réponses: 5
    Dernier message: 11/04/2007, 12h39
  4. Besoin d'aide avec regexp
    Par goblin dans le forum Langage
    Réponses: 3
    Dernier message: 04/12/2005, 04h27

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