Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/12/2007, 14h18   #1
Invité régulier
 
Inscription : décembre 2005
Messages : 54
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 54
Points : 9
Points : 9
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 :
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 :
 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
eultartuffe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2007, 16h17   #2
Membre émérite
 
Inscription : mai 2004
Messages : 709
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 709
Points : 852
Points : 852
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.
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
:quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
Jabber: ripat at im.apinc.org
ripat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 15h35   #3
Membre du Club
 
Inscription : janvier 2003
Messages : 53
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 53
Points : 55
Points : 55
Envoyer un message via MSN à Scarmatil
Code :
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 :
 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.
Scarmatil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 16h34   #4
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 496
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 496
Points : 9 677
Points : 9 677
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.
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h15.


 
 
 
 
Partenaires

Hébergement Web