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 et expression régulière


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 165
    Par défaut ?grep et expression régulière
    Bonjour,

    Dans un fichier a.txt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    %SystemRoot%\abcd?.exe
    %SystemRoot%\abcd.exe
    %SystemRoot%\abc?.exe
    %SystemRoot%\abcd1.exe
    %SystemRoot%\abcdkz.exe
    %SystemRoot%\abcd???.exe
    comment faire pour trouver toutes les lignes qui répondent exactement à ces 3 critères :
    - commencent par %SystemRoot%\abc,
    - suivi d'un unique caractère quelconque,
    - et enfin de l'expression ".exe" ?

    ceci pour arriver à afficher simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    %SystemRoot%\abcd.exe
    %SystemRoot%\abc?.exe
    Bien sur j'ai essayé un grand nombre de combinaisons avec grep -n, egrep -n et fgrep (il me faut les numéros de ligne), mais cela ne donne rien de convaincant. De plus je suis sur un pb bien plus complexe mais je 'aperçois déjà que ça coince à ce niveau

    Merci pour votre aide

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2006
    Messages : 197
    Par défaut
    si tu n'est pas obligé de te servir de grep, tu peux utiliser awk :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    more a.txt | awk '/%SystemRoot%\abc/ {print $0}'
    j'ai pas testé.
    il faut suremement mettre des \ devant les caractères spéciaux...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 165
    Par défaut
    salut,

    je viens de tester ta commande, avec une protection \ pour le slash, mais ça ne matche pas exactement les deux lignes visées

    résultat attendu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    %SystemRoot%\abcd.exe
    %SystemRoot%\abc?.exe
    réultat effectif :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    more a.txt | awk '/%SystemRoot%\\abc/ {print $0}'
    %SystemRoot%\abcd?.exe
    %SystemRoot%\abcd.exe
    %SystemRoot%\abc?.exe
    %SystemRoot%\abcd1.exe
    %SystemRoot%\abcdkz.exe
    %SystemRoot%\abcd???.exe
    pour la nécessité de ?grep, je sais pas, mais par contre j'ai besoin des n° de ligne où l'expression visée correspond.

    Je précise que a.txt n'est qu'un échantillon
    Ca me gave de bloquer la dessus depuis deux jours

    Merci

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2007
    Messages : 552
    Par défaut
    Bonjour.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep "^\%SystemRoot\%.abc.\.exe$" a.txt
    C'est presque ce que tu désires (j'ai remplacé le caractère \ par un caractère quelconque).

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 81
    Par défaut
    essaie ceci sinon ca devrait fonctionner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     grep -n '^%SystemRoot%\\abc.\.exe' a.txt

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 165
    Par défaut
    Ok, impeccable ça marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    grep -n '^%SystemRoot%\\abc.\.exe' a.txt
    2:%SystemRoot%\abcd.exe
    3:%SystemRoot%\abc?.exe
    maintenant, voici une approche plus précise du pb final : %SystemRoot%\abc est une variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    a="%SystemRoot%\abc"
    echo $a
    SystemRoot%\abc
    jusque là pas de pb. Je voudrais donc lancer une recherche équivalente à ci-dessus mais plus générale, quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -n '^"$a".\.exe' a.txt
    Malheureusement ça ne marche pas, avec ou sans guillemets...

    Apparemment ce ne sont pas les antislash qui posent pb, exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    b=coucou
     
    cat b.txt
    Coucou.exe
    coucoux.exe
    coucouz.exe
    coucou?.exe
    couccousx.sys
    coucou.dll
     
    grep -n '"$b".\.exe' b.txt
    => aucun résultat

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 81
    Par défaut
    ne mets pas de guillemet mais des quotes et voit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    grep -n '^'$b'.\.exe' b.txt

  8. #8
    Membre émérite

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2007
    Messages : 552
    Par défaut
    La fonction eval donnera peut-être des résutats.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    a=System
    eval 'grep -e $a a.txt'
    %SystemRoot%\abcd.exe
    %SystemRoot%\abc?.exe
    %SystemRoot%\abcd1.exe
    %SystemRoot%\abcdkz.exe
    %SystemRoot%\abcd???.exe
    edit: autre piste.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    c="$b".\.exe
    grep -e $c b.txt

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

Discussions similaires

  1. grep et une expression régulière
    Par Don_Q dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 18/10/2012, 13h54
  2. [grep] Une question sur les expressions régulières
    Par Bahan_auboulot dans le forum Linux
    Réponses: 5
    Dernier message: 04/12/2008, 19h12
  3. Expressions régulières - Extraction de données Grep
    Par ritual dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 10/10/2008, 14h55
  4. expression régulière grep
    Par MaitrePylos dans le forum Langage
    Réponses: 5
    Dernier message: 02/10/2007, 10h32
  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