site
header
Rendez-vous sur Arrakis
Le site perso d'un hacker libriste curieux crêpophile et étourdi

Chercher un mot dans plusieurs fichiers

Dans tous mes fichiers, que ce soit du code ou des notes, je m'y perds parfois un peu. La plupart du temps, je me souviens juste d'un mot qui doit être présent dans ce fichier.
J'utilise et j'abuse de cette petite fonction (à placer dans ~/.profile) qui s'utilise ainsi :

findcontent /path expression_régulière
findcontent () {
     if [ -n "$2" ]; then
         find "$1" -type f -exec grep -qI "$2" {} \; -print
     else
         find "./" -type f -exec grep -qI "$1" {} \; -print
     fi
 }
 

Il vous affichera le nom des fichiers contenant l'expression régulière.

Merci à celui ou celle qui me l'avait fait découvrir il y a quelques années, c'est redoutable.

le 21/02/2018 à 13:17:31, hallow_vim a dit :

Hello,

je suis très très mauvais en bash. Mais cette mini-fonction est-elle très différente d'un

grep -R expression_régulière /path

?

Dans tous les cas, merci pour l'astuce.

le 21/02/2018 à 13:25:50, thuban a dit :

La différence, c'est que ça affiche clairement le nom du fichier dans lequel se trouve l'expression régulière. Sinon, c'est le même principe.

le 21/02/2018 à 13:56:58, ututx a dit :

@hallow_vim : +1 j'allais dire la même chose

le 21/02/2018 à 15:20:36, thuban a dit :

@ututx : "grep -R" paut "matcher aussi sur des binaires, ce qui n'est pas vraiment ce qu'on souhaite.

le 21/02/2018 à 18:16:29, Minami-o a dit :

@thuban :
OK, mais c'est ce que l'option -I de grep que tu utilises fait, justement, ignorer les binaires, le find n'est pas indispensable je crois…
Je dirais qu'un

grep -Ilrs regexp path

donne le même résultat dans tous les cas.

À noter quand même que pour que le script suive les liens symboliques, il faut ajouter l'option -L à find (ou remplacer r par R si on n'utilise que grep) :

find -L path -type f -exec grep -qI regexp {} \; -print
grep -IRls regexp path

Merci pour le partage, ça m'a donné l'occasion de vérifier les options man de ces deux commandes (find et grep) !

le 21/02/2018 à 19:30:12, thuban a dit :

Wow, super l'équivalent avec grep seul ! Merci !

le 23/02/2018 à 16:33:53, PengouinPdt a dit :

Ahhh, la puissance de grep - et de sed, d'ailleurs - !
On a souvent tort de chercher à le greffer à find, alors qu'il est vraiment aussi puissant à utiliser tout seul...

le 06/03/2018 à 18:00:10, steph a dit :

je préfère une variante avec xargs (`-print0 | xargs -0`) qui évite de lancer un grep pour chaque fichier.