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 :

Petit problème avec grep


Sujet :

Shell et commandes GNU

  1. #1
    dug
    dug est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 151
    Points : 84
    Points
    84
    Par défaut Petit problème avec grep
    Bonjour,

    un ptit question facile:

    j'ai un fichier contenant plusieurs lignes du genre:

    16 S blalalablaTypeblobloblo
    17 T blalalablaTypeblobloblo

    cat fichier | grep "[0-9][0-9] T*"

    je souhaite récupèrer évidemment la ligne 17 et non pas 16, mais cela ne fonctionne pas
    je ne trouve pas pour qu'il interprète correctement " ", il me le prend comme une "*"

    un peu d'aide please...

  2. #2
    Rédacteur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2002
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 608
    Points : 1 561
    Points
    1 561
    Par défaut
    -e pour que la chaîne soit considérée comme une regexp il me semble :

    cat fichier | grep -e "[0-9][0-9] T*"

  3. #3
    dug
    dug est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 151
    Points : 84
    Points
    84
    Par défaut
    merci de ta réponse,
    mais cela ne fonctionne pas...

    je travaille sur Sun OS 5.7, et la commande avec le paramètre -e ne fonctionne pas

    Le code entre les crochets fonctionnent, donc je suppose que les expressions régulières sont activées.

    j'ai testé cela sans résultat:
    cat fichier | grep "[0-9][0-9][ ]T*"

    c'est normale qu'il me traduit l'espace comme une étoile ?
    comment faire autrement ?

  4. #4
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    1. pourquoi tu mets l'étoile ? ça ne sert à rien
    2. tu devrais peut être essayer de protéger ton espace avec un backslash '\'
    3. les guillemets sont ils vraiment nécessaires ?
    4. tu pourrais mettre ^ en début de ligne pour spécifier que tu veux que les 2 chiffres doivent être systématiquement en début de ligne
    5. je ferais :
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 63
    Points : 74
    Points
    74
    Par défaut
    tu devrais plutot essayer ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       cat fichier | grep "[0-9][0-9] T.*"
    ou
        cat fichier | egrep "[0-9]{2} T.*"
    fallait rajouter le ".*" a la fin pour reconnaitre tout la ligne sinon le egrep c'est les regexp etendu

  6. #6
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Je maintiens le premier point de ggnore : le ".*" est superflu ... une fois qu'on a le T, on se fiche du reste ... pas la peine de le faire matcher avec une chaine bidon.

    Sinon, si l'on mets des guillemets, pas besoin de backslasher le blanc (points 2 et 3).

    Pour le quatrième point ... il faut voir ... Si le fichier contient des lignes - avec le ^ elles ne seront pas prises,
    - sans le ^ elles seront prises.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat fichier | grep "^[0-9][0-9] T"
    me paraît pertinent.


    Bonne continuation
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  7. #7
    dug
    dug est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 151
    Points : 84
    Points
    84
    Par défaut
    merci pour vos réponses, cela fonctionne bien avec cette commande:
    cat fichier | grep "^[0-9][0-9] T"


    par contre, je n'ai pas vraiment compris pourquoi le faite de faire la recherche en début de ligne (^) change l'interprétation de l'espace, en plusieurs...

    quelqu'un peut m'éclairé ?

  8. #8
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Citation Envoyé par dug
    merci pour vos réponses, cela fonctionne bien avec cette commande:
    cat fichier | grep "^[0-9][0-9] T"


    par contre, je n'ai pas vraiment compris pourquoi le faite de faire la recherche en début de ligne (^) change l'interprétation de l'espace, en plusieurs...

    quelqu'un peut m'éclairé ?
    le '^' signifie que grep ne renvoie que les lignes qui commencent avec le motif que tu as créé. ça n'a rien à voir avec les espaces.

    Par contre, tu noteras que dans l'expression de 2eurocent, il n'y a pas d'*
    Peut être que l'étoile provoquait un comportement spécial...
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  9. #9
    dug
    dug est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 151
    Points : 84
    Points
    84
    Par défaut
    tu as raison ggnore, j'ai regardé en détail et voilà le résultat:

    cat /scv/tmp/as_liste_proc.22562 | grep "[0-9][0-9] T*"
    -> ne fonctionne pas

    cat /scv/tmp/as_liste_proc.22562 | grep "^[0-9][0-9] T*"
    -> ne fonctionne pas

    cat /scv/tmp/as_liste_proc.22562 | grep "^[0-9][0-9] T"
    -> fonctionne

    tout de même, même avec de la bonne volonté pour trouver la logique, c'est pas toujours évident sur certaine commande...
    là je vois pas la logique, le 2e cas devrait marcher...

  10. #10
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    le "pattern" que tu mets dérrière ton grep obéis à des lois qui lui sont propres. ça n'est pas du shell.

    Tu n'as pas l'air de comprendre que le caractère étoile ne signifie pas
    forcément "chaîne composée de tous caractères de longueur indéterminée".

    fais davantage de recherches sur grep ...
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  11. #11
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Dans une expression rationnelle, "*" ne veut rien dire seule.

    C'est un multiplicateur de l'élément devant.

    Ainsi "toto *" matchera toto avec 0 à n blanc derrière.

    Un caractère quelconque, c'est ".". Donc 0 à n caractères quelconques, c'est ".*".

    C'est mieux, comme ça ?


    Pour ce qui est de commencer l'interprétation en début de ligne, ça change simplement le comportement vis à vis des lignes qui commencent par le motif ou celles qui contiennent, sans nécessairement commencer par lui.

    Bonne continuation.
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  12. #12
    dug
    dug est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 151
    Points : 84
    Points
    84
    Par défaut
    ouaip, je comprends mieux

    merci de vos réponses !

  13. #13
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Alors je crois qu'un petit tag [Résolu] sur le sujet devrait approcher à grands pas .

    Utilise le petit bouton, en bas à gauche de l'interface, quand tu visualises le fil.

    Bonne continuation.
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  14. #14
    dug
    dug est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 151
    Points : 84
    Points
    84
    Par défaut
    c'est fait, j'avais oublié

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

Discussions similaires

  1. petit script avec grep
    Par turbo_chess dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 21/03/2007, 15h39
  2. [Syntaxe] PETIT probl avec un Jlabel
    Par blackcrow1981 dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 14/09/2006, 19h53
  3. Petite mise au point avec gluUnProject.
    Par fatpat94 dans le forum OpenGL
    Réponses: 1
    Dernier message: 27/07/2005, 15h40
  4. Rechercher un crochet avec grep
    Par le mage tophinus dans le forum Linux
    Réponses: 2
    Dernier message: 27/05/2005, 14h17
  5. [XSLT]petit(s) pb(s) avec les xmlns et <xsl:namespace-ali
    Par Swoög dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 08/01/2005, 17h04

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