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 :

egrep et parenthèses


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
    Décembre 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 54
    Par défaut egrep et parenthèses
    Salut tout le monde,

    Voila j'ai un petit problème avec egrep
    Je suis dans un dossier qui contient des fichiers sources java (et ce dossier contient des dossiers qui contiennent aussi des fichiers java)
    Et en fait je dois :

    compter le nombre de méthodes déclarées private dans tous les fichiers, donc j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    egrep -r 'private\.*' *java . | egrep '\(' | wc -l
    (qui a l'air de marcher)

    Ensuite je dois afficher seulement le nom des fichiers qui contiennent au moins une méthode déclarées private (et là je ne vois vraiment pas)
    Et enfin, je dois afficher la liste des méthodes avec un accès par défaut et dont le type de retour est int ou void, donc j'ai commencé par faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     egrep -r '(int |void )\.*\(\)' *java .
    pour afficher les lignes avec int ou void suivi de n'importe quel caractère et suivi de (.....) mais rien n'y fait...

    Voilà si quelqu'un a une idée...
    Merci d'avances

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Par défaut
    Je pense que tu confonds le wild card * avec le quantificateur regex * (0 ou plusieurs).
    En regex:
    .* (dot*) veut dire tout caractère 0 ou plusieurs fois.
    .+ (dot+) veut dire tout caractère 1 ou plusieurs fois.

    De plus, pour les parenthèses de ton alternative (xxx|yyy), il vaut mieux utiliser l'option regex extended -E. Ou bien grep \(xxx\|yyy\) ce qui est nettement moins lisible...

    Donnes un exemple des lignes que tu veux capturer pour voir.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 53
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    egrep -r 'private\.*' *java . | egrep '\(' | wc -l
    Note que tu pouvais faire ça sans découper de egrep.

    Citation Envoyé par eultartuffe
    Ensuite je dois afficher seulement le nom des fichiers qui contiennent au moins une méthode déclarées private (et là je ne vois vraiment pas)
    Quand il est utilisé sur plusieurs fichiers, egrep affiche par défaut le nom du fichier juste avant la ligne.
    Il suffit que tu utilise la commande cut pour garder uniquement la première colonne et ensuite uniq pour éliminer les doubles.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     egrep -r '(int |void )\.*\(\)' *java .
    Avec ça tu va trouver des lignes du type
    avec les pointillés représentant... une suite de point.
    Dans ton cas, pas besoin de slash devant le point, puisque ce que tu veux ce ne sont pas des points mais n'importe quel caractère (sens par défaut de . ).

    (Remarque aussi que dans ce cas ton expression régulière ne reconnait que les méthodes sans paramètres)

    Citation Envoyé par ripat
    De plus, pour les parenthèses de ton alternative (xxx|yyy), il vaut mieux utiliser l'option regex extended -E. Ou bien grep \(xxx\|yyy\) ce qui est nettement moins lisible...
    egrep est equivalent à grep -E.

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    Citation Envoyé par eultartuffe Voir le message
    Ensuite je dois afficher seulement le nom des fichiers qui contiennent au moins une méthode déclarées private (et là je ne vois vraiment pas)
    L'option -l de grep permet de faire cela : afficher le nom des ficheir contenant la chaine que tu recherches.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

Discussions similaires

  1. [Eclipse 3.1]matching d'accolades et parenthèses
    Par longbeach dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 04/08/2005, 15h22
  2. Réponses: 11
    Dernier message: 08/07/2005, 14h48
  3. parenthèse suivante
    Par tolliv dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/04/2005, 12h22
  4. [Lisp] Suppression des parenthèses dans une liste
    Par bourdaillet dans le forum Lisp
    Réponses: 3
    Dernier message: 19/12/2004, 21h02
  5. Appeler une fonction avec/sans parenthèses
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/12/2002, 18h48

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