Bonjour,
je souhaiterais savoir s'il existe une ligne de commande permettant d'identifier un fichier sur la base de son contenu.
Je vais mieux m'expliquer.
Si j'utilise la commande
find /home -iname *nomdefichier*
le terminal rend le/les fichiers nommés nomdefichier.
Or, imaginez que j'ai un fichier dont le nom m'échappe mais que je suis sûre et certaine qu'il contient, entre autre, l'expression "le père Noël".
Existe-t-il une ligne de commande permettant de retrouver le fichier tapant une partie de son contenu, dans mon exemple "le père Noêl"?
Merci,
Julie
Oui,
grep -R 'le père noel' ~
recherche récursivement dans le dossier personnel (~ , qui peut être changé pour autre chose) la chaîne 'le pere noel'
On peut aussi filtrer le retour pour n'afficher que le nom du fichier
Par contre ça peut être très long.

grep est un outil formidable 🙂
Petites précisions :
- l'option -R ira chercher récursivement y compris dans les liens symboliques, ce qui n'est en général pas voulu : utiliser -r dans ce cas ;
- grep est sensible à la casse par défaut : pour trouver « le père Noël », il faut mettre l'option -i ;
- à fortiori les caractères e, ë, et ê (utilisé aussi dans le message de gorosk) sont différents : pour tous les trouver, il faut utiliser la classe de caractères [=e=] (avec pour langue du terminal le français).

Au final, ça donnerait donc :
grep -ir 'le père no[[=e=]]l' ~
Mais si on est sûr de la typographie, on peut se contenter de
grep -r 'le père Noël' ~
kamaris a écrit utiliser la classe de caractères [=e=] (avec pour langue du terminal le français).
grep -ir 'le père no[[=e=]]l' ~
"la classe de caractères", je ne connaissais pas : super !
Merci kamaris ! 🙂
moko138 a écrit"la classe de caractères", je ne connaissais pas : super !
Merci kamaris ! 🙂
De rien, mais précisément, il vaudrait mieux ne pas appeler ça une classe de caractères, pour ne pas faire la confusion avec les expressions du type [:alpha:] (= A-Za-z) ou [:alnum:] (= A-Za-z0-9), pour lesquelles ce terme est bien adapté.
Dans le cas de [=e=], il vaudrait mieux parler de classe d'équivalence (de caractères), dont « e » apparait comme le représentant « canonique », en tant qu'il est ascii.

Cf. wikipédia, dont je trouve que la page sur les regex est une bonne introduction et un bon aide-mémoire : https://fr.wikipedia.org/wiki/Expression_r%C3%A9guli%C3%A8re#Classe_de_caract%C3%A8res
(le pire, c'est que j'y ai regardé hier, mais évidemment, j'ai fait l'erreur quand même :rolleyes:)

😃
kamaris : Merci pour le [=e=] !! C'est génial !
Eh bien elles auront fait des heureux ces classes d'équivalence ! 😉
Que dire...un grand merci à vous tous!
Julie
Bonjour,
Si on ne cherche que le nom des fichiers contenant une expression donnée, ne conviendrait-il pas d'utiliser l'option "-l"
grep -l "le père noël" *
Avec si besoin "-r" si la recherche est récursive (nonobstant les autres propositions, au demeurant excellentes,proposées par kamaris !) 🙂