15/11/2024

Commandes et Système

Linux : comment utiliser grep pour rechercher un mot dans plusieurs fichiers et dossiers ?

I. Présentation

Dans ce tutoriel, nous allons utiliser la commande "grep" sous Linux pour rechercher la présence d'un mot dans plusieurs fichiers et dossiers, sur une machine Linux (Debian 12, pour cet exemple).

La commande "grep" fait partie des commandes indispensables lorsqu'il est question d'administration de machines Linux. D'ailleurs, vous avez peut-être déjà utilisé la commande grep pour rechercher une chaine de caractère dans un fichier. Cette fois-ci, nous irons plus loin puisque nous allons effectuer une recherche dans plusieurs fichiers ou dossiers.

Les cas d'utilisation sont nombreux :

  • Rechercher les occurrences d'une adresse IP dans des fichiers
  • Rechercher les occurrences d'un nom d'utilisateur
  • Rechercher les occurrences d'une fonction dans un ensemble de scripts
  • Etc...

Sur un environnement Windows, vous pouvez utiliser le cmdlet PowerShell "Select-String" pour effectuer des recherches similaires :

Version d'origine de l'article : 15 août 2012

II. La commande grep et la récursivité

Pour que la commande grep recherche dans les fichiers et dossiers de façon récursive, nous devons utiliser l'option "-r". La syntaxe de la commande sera la suivante :

grep -r "mot à rechercher" /chemin/vers/le/dossier

Par exemple, si nous voulons rechercher tous les fichiers contenants le mot "it-connect" sur tout le système (la racine "/" est notre point de départ), nous allons utiliser cette commande :

grep -r "it-connect" ./

Nous pouvons également rechercher à partir d'un autre répertoire. Par exemple, si l'on souhaite rechercher dans tous les fichiers et dossiers sous "/home", nous utiliserons cette commande :

grep -r "it-connect" /home/

Voici le résultat obtenu :

Grep rechercher mot dans plusieurs fichiers dossiers

Cela signifie qu'après avoir analysé le contenu de tous les fichiers présents dans "/home/" et dans tous les sous-dossiers présents sous cette racine, grep a trouvé uniquement un seul résultat. Il s'agit du fichier "/home/flo/document.txt" et grep a identifié la chaine "www.it-connect.fr" à l'intérieur.

III. Quelques options supplémentaires

A. Grep : ne pas tenir compte de la casse

Pour étendre légèrement votre recherche, vous pouvez utiliser l'option "-i" au lancement de votre commande pour rendre grep insensible à la casse. Sinon, sans cette option, la commande est sensible à la casse, ce qui signifie qu'elle fait la distinction entre les minuscules et les majuscules, ce qui peut influencer le résultat de la recherche (c'est un mode plus strict).

grep -r -i "it-connect" /home/
# ou
grep -ri "it-connect" /home/

Cela donnera le résultat suivant:

Nous pouvons voir que la commande retourne un résultat supplémentaire, dans une page HTML où grep a pu identifier la chaine "IT-Connect".

B. Grep : afficher seulement les noms de fichiers

Vous pouvez simplifier le résultat de votre recherche en y ajoutant l'option "-l". Ainsi, seuls les noms des fichiers apparaitront. Sans cette option, et comme nous l'avons vu précédemment, vous aurez le nom du fichier ainsi que le contenu de la ligne contenant le mot recherché, ce qui peut rendre le résultat de la recherche peu lisible s'il y a beaucoup de résultats.

grep -r -i -l "it-connect" /home/
# ou
grep -ril "it-connect" /home/

Cela donnera le résultat suivant :

C: Grep : afficher les numéros de ligne

Nous pouvons afficher le numéro de ligne où une chaîne a été trouvée en utilisant l'option "-n" avec la commande grep. Cette option ne peut pas être utilisée conjointement avec l'option "-l".

grep -r -i -n "it-connect" /home/
# ou 
grep -rin "it-connect" /home/

Ainsi, nous pouvons que pour le premier résultat, la chaine a été identifiée sur la ligne n°1, tandis que pour le second résultat, la chaine a été identifié sur la ligne n°3.

grep avec numero de ligne

Une fois de plus, nous pouvons constater que grep contient beaucoup d'options d'exécution, ce qui en fait un outil très puissant !

IV. Conclusion

Grâce à cette commande facile à utiliser, nous pouvons effectuer une recherche rapidement sur un système Linux. Ceci peut permettre de gagner un temps précieux...!

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

1 commentaire sur “Linux : comment utiliser grep pour rechercher un mot dans plusieurs fichiers et dossiers ?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.