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 :

regexp shell pour trouver certains types de if


Sujet :

Shell et commandes GNU

  1. #1
    Expert confirmé Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 619
    Points : 4 352
    Points
    4 352
    Par défaut regexp shell pour trouver certains types de if
    Bonjour,

    je cherche à écrire un script shell qui m'indiquera si certains types de if sont dans une liste de fichiers.

    Je cherche des patterns de la forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if[des espaces]([des "trucs"]== 0)
    A la place de == 0, je voudrais aussi chercher == 1, != 0, !=1

    Avec un grep j'arrive pour l'instant à faire le début (pas compliqué)

    Pour tester sur la fin de la ligne, j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep "if[ ]*([.]*[== 0)]$" *
    Mais apparemment c'est pas bon (la commande ne renvoie rien alors qu'elle devrait trouver des cas).

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 595
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 595
    Points : 19 477
    Points
    19 477
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep 'if \+(.\+[=!]= [01])'
    ...
    ?

  3. #3
    Expert confirmé Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 619
    Points : 4 352
    Points
    4 352
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep 'if \*(.\+[=!]= [01])' dummy.c

    J'ai essayé avec ça, j'ai mis un * après l'espace au lieu du +, car j'ai 0 ou 1 ou plusieurs espaces, mais je n'ai rien en sortie :s

    Citation Envoyé par fichier dummy.c
    if (sgkjgsdfglhkù$*! == 0)

  4. #4
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 843
    Points
    4 843
    Par défaut
    Et comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -Pe 'if\s*\([^!=]+[!=]=\s*[01]\s*\)'

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 595
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 595
    Points : 19 477
    Points
    19 477
    Par défaut
    il ne faut pas protéger l'astérisque.

  6. #6
    Expert confirmé Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 619
    Points : 4 352
    Points
    4 352
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    illegal option -- P
    illegal option -- e
    Je crois que j'ai une version particulière de ksh.
    L'option -e est pourtant bien dans le man. J'ai essayé avec -E (dans le man aussi), illegal option aussi.

    J'ai essayé également sans protéger l'astérisque -toujours avec mon fichier dummy.c en deuxième paramètre de grep- sans succès.

    En essayant d'autres choses (-E au lieu de -e), j'ai le message d'erreur suivant :
    Usage: grep -hblcnsviw pattern file ...

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 595
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 595
    Points : 19 477
    Points
    19 477
    Par défaut
    grep n'est pas une commande ksh

    tu peux nous afficher un extrait de dummy.c, ainsi que la sortie attendue ?

  8. #8
    Expert confirmé Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 619
    Points : 4 352
    Points
    4 352
    Par défaut
    Il y a deux lignes dans dummy.c, la ligne avec le if, suivie d'un retour à la ligne.

    Code exact de dummy.c : Sélectionner tout - Visualiser dans une fenêtre à part
       if  (sgkljgsù*!wsd == 0)

    La sortie attendue serait qu'il m'affiche la ligne, donc (et ensuite j'essayerais avec de "vrais" fichiers).

    Dans d'autres scripts, je vois des utilisations de awk (qui n'est pas vraiment fait pour la recherche de pattern, mais bon). Est-ce qu'avec ksh il serait mieux que j'utilise awk ou sed ou autre ?

  9. #9
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 595
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 595
    Points : 19 477
    Points
    19 477
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ cat dummy.c
       if  (sgkljgsù*!wsd == 0)
    $ grep 'if *(.\+[=!]= [01])' dummy.c
       if  (sgkljgsù*!wsd == 0)
    !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ apropos ^awk$
    awk (1)              - pattern scanning and text processing language

  10. #10
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 843
    Points
    4 843
    Par défaut
    Le mieux pour les regex c'est Perl, d'ailleurs le switch "-P" de grep avait pour but d'utiliser les regex type Perl.

    Par contre c'est généralement utilisé pour remplacer sed plutôt que grep.
    Ceci dit tu peux quand même le faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -ne 'if(/if\s*\(.*?[!=]=\s*[01]\s*\)/) { print $_; }'

  11. #11
    Expert confirmé Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 619
    Points : 4 352
    Points
    4 352
    Par défaut
    N_BaH : bizaremment chez moi, même commandes au caractère prêt, pas le même résultat.

    Avec la commande perl ça fonctionne, donc je vais passer par là, on verra si je continue mes scripts via perl ou en utilisant awk.

    Merci pour votre aide, j'ai bien amélioré ma connaissance des pattern

  12. #12
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    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 102
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par ManusDei Voir le message
    N_BaH : bizaremment chez moi, même commandes au caractère prêt, pas le même résultat.
    Tu es sous quel OS? (uname -a par exemple)

  13. #13
    Expert confirmé Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 619
    Points : 4 352
    Points
    4 352
    Par défaut
    SunOS 5.8, sur sparc.

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

Discussions similaires

  1. [RegEx] Regexp pour déterminer le type de navigateur
    Par jrmy7 dans le forum Langage
    Réponses: 3
    Dernier message: 29/11/2011, 11h19
  2. Réponses: 15
    Dernier message: 30/11/2007, 15h36
  3. Regexp shell pour sed
    Par GLDavid dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 15/11/2006, 16h21
  4. [Regexp] pattern pour trouver des fichiers par exclusion d'extension
    Par mnementh64 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 07/09/2006, 10h34
  5. Trouver tous les objets d'un certain type dans un document?
    Par kobe dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 03/11/2005, 17h07

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