Grep un peu spécial...

Fermé
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 26 mars 2008 à 13:45
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 26 mars 2008 à 14:32
Bonjour,

Voilà j'ai un besoin un peu spécial. J'ai une quantité phénoménale de fichiers dans un repertoire (qui en contient plein d'autres).

Je veux relever dans ces repertoires tous les fichiers qui possèdent certains mot à l'intérieur.
Mettons je cherche tous les fichiers qui contienent "barbe", "cerise", "montagne" et "charrette".

Sachant d'ailleurs que ces mots peuvent être indifféremment en minuscule ou en majuscule et pas necessairement sur la même ligne, c'est d'ailleurs ce dernier élement qui coince.

En effet grep ne fonctionne que ligne par ligne si je ne m'abuse, or moi j'ai besoin de vérifier un fichier entier avec des expressions régulières. De préférence pas un script Perl, d'abord parce que je connais pas le Perl et que j'aimerais un truc rapide (plutôt codé en C comme grep).

Pensez vous que ce logiciel existe déjà ou bien faudra t'il que je code moi même ça en C?
Ou peut être est ce une option de grep que je n'aurais pas vu....

Merci d'avance.
A voir également:

8 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
26 mars 2008 à 13:49
Salut,

Euh... qu'entends-tu exactement par "En effet grep ne fonctionne que ligne par ligne si je ne m'abuse, or moi j'ai besoin de vérifier un fichier entier avec des expressions régulières." ???

Tu veux chopper des intervalles ?
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
26 mars 2008 à 13:55
Ben je ne sais pas trop ce que tu entends par intervalles (j'ai toujours un peu utilisé les regexp comme un boucher)...

Je te donne un exemple:
Ce monsieur avait une barbe ample, et certes le peuple le jalousait. <-- saut de ligne
Mais tandis tandis que de la montagne perlait une rivière de cerise <-- saut de ligne
La charette d'icelui barbu tnetait de les recueuilir

Si cette page matche tous les mots en gras (c'est le cas ici), elle est bonne.

Tu vois ce que je veux dire? Mais les mots peuvent ne pas être dans cet ordre...
0
blux Messages postés 26450 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 6 novembre 2024 3 312
26 mars 2008 à 13:56
Salut,
grep -E "barbe|cerise|montagne|charrette" *
en étant dans le répertoire...?

ou alors j'ai pas compris la demande...
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
26 mars 2008 à 13:58
Oui mais pour que ton expression marche, il faut que tous les mots soient présents dans la même ligne. De plus ici ça matchera si un seul des mots est présent alors qu'il faudrait que tous soient présents.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
26 mars 2008 à 14:16
Oui mais pour que ton expression marche, il faut que tous les mots soient présents dans la même ligne.
Non, non ;-))

De plus ici ça matchera si un seul des mots est présent alors qu'il faudrait que tous soient présents.
Elles sont contradictoires ces 2 phrases, non ? ou c'est moi qui ai mal compris ? ;-\
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
26 mars 2008 à 14:19
:-D

Ca marchera si un seul des mots est présent dans une des lignes du fichier en fait, c'est bien ça?
0
je récapitule pour être sûr d'avoir bien compris:

tu cherches à sortir la liste des fichiers qui contiennent les 4 mots peu importe l'ordre, peu importe la casse, et peu importe leur emplacement dans le fichier , c'est ça ?
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
26 mars 2008 à 14:32
Parfaitement!

En attendant j'ai bien une solution temporaire:
grep "mot1" -r rep | cut -d : -f 1

Me sort tous les fichiers comportant tel mot. Après je peux réitérer sur ces mêmes fichiers un test pour savoir s'il y a le deuxième mot etc...

Qu'est ce que vous en pensez? Ce n'est pas très élégant mais bon...

EDIT: (J'en profite pour dire que grep est sacrément rapide, je ne l'avais jamais vu tester une montagne de fichiers et il se débrouille bien....)
0