Rechercher les fichiers contenant une chaîne donnée

D'abord il faut comprendre ce que fait cette commande :

$ grep -EHn -e "salut toto" fichier.txt

Cette commande lit le fichier "fichier.txt" ligne par ligne (grep lit toujours un fichier ligne par ligne) et cherche celles qui correspondent à la regex donnée par l'option -e (ici c'est une simple recherche de la chaîne "salut toto"). L'option -H permet d'afficher le nom du fichier dans lequel la recherche est effectuée et l'option -n permet d'afficher le numéro de la ligne qui correspond à la regex. Quant à l'option -E, elle permet d'utiliser les expressions régulières "ERE". On pourrait aussi utiliser "egrep" qui est équivalent à "grep -E", mais c'est déconseillé dans "man grep" :

« Direct invocation as either egrep or fgrep is deprecated, but is provided to allow historical applications that rely on them to run unmodified. »
Alors que « -E is specified by POSIX. »

Ainsi, on a en sortie des lignes de la forme :

fichier.txt:54:Tiens salut toto, ça va ?

C'est assez inhabituel d'utiliser la commande grep ainsi car en général on la place juste après un pipe.

Maintenant, pour rechercher dans le dossier /home/francois tous les fichiers qui contiennent des lignes qui correspondent à la regex "salut toto" (on pourrait imaginer une regex plus compliquée bien sûr), on utilise la commande find (encore et toujours) de cette manière :

$ find /home/francois -type f -exec grep -EHn "salut toto" {} \;

Comme d'habitude, find effectue une recherche récursive (toujours par défaut) et on obtiendra en sortie des lignes de la forme :

nom-de-fichier:numéro-de-ligne:ligne-correspondant-à-regex
Cette entrée a été publiée dans Commandes pratiques, avec comme mot(s)-clef(s) , . Vous pouvez la mettre en favoris avec ce permalien.

Les commentaires sont fermés.