Grep : trouver tous les fichiers contenant une chaîne de caractères

Depuis quelques années maintenant, je suis un utilisateur quotidien de Linux et plus précisément de la distribution Kubuntu que j’affectionne particulièrement. Lorsque l’on commence à manipuler une distribution Linux, on est rapidement amené à utiliser la ligne de commande qui est un outil très puissant une fois maîtrisé. J’utilise aussi macOS pour mon métier de développeur et comme pour Linux, chaque jour, j’utilise énormément la ligne de commande.

D’ailleurs, lorsque l’on administre des serveurs VPS ou dédiés, ils seront en général sur une distribution Linux et encore une fois, il est difficile de passer à côté de la ligne de commande. Rassurez-vous, même si cela peut faire peur au début, on y prend vite goût surtout quand on se rend compte du temps considérable que l’on peut gagner. Aujourd’hui, nous allons parler de la commande grep qui permet de trouver une chaîne de caractère dans les fichiers d’un dossier, c’est vraiment très pratique !

J’ai souvent eu besoin de grep pour aller retrouver des informations de configuration, rechercher dans les fichiers de thème WordPress pour faire une modification, ou encore fouiller dans les fichiers de logs de Laravel. Ce ne sont que des exemples parmi tant d’autres tellement grep est utile dans de nombreux cas de figure. 

Comment utiliser la commande grep pour trouver une chaine de texte dans des fichiers

Dans les exemples qui vont suivre, je vais partir du principe que nous cherchons à la chaîne de caractère :  » </head>  » dans les fichiers d’un WordPress. Pour commencer, je prends la commande la plus courante avec deux paramètres très importants :

grep -l -r "</head>" /home/site/monsite.com/

Il est aussi possible d’utiliser la syntaxe suivante qui donnera les mêmes résultats :

grep -rl "</head>" /home/site/monsite.com/

Cette commande utilise donc l’outil grep pour rechercher la chaîne de caractères </head> dans tous les fichiers situés dans le répertoire « /home/site/monsite.com/ » et ses sous-répertoires. Le paramètre -l est très important selon ce que vous souhaitez obtenir comme affichage de vos résultats. Pour commencer à utiliser la commande grep je vous conseille de toujours le renseigner dans un premier temps. Je reviendrai sur ce point juste après et vous comprendrez pourquoi.

Le deuxième paramètre -r indique a grep de rechercher le texte spécifié de manière récursive dans tous les sous-répertoires du répertoire qui contient vos fichiers.

Passons à la pratique, sur un dossier qui contient les fichiers d’un site sous WordPress, ces deux commandes me renvoient alors le résultat suivant :

Pourquoi je vous ai parlé paramètre -l juste avant et son importance ? Si vous ne le mettez pas, grep va alors vous renvoyer le contenu du fichier avec la position de l’occurrence que vous cherchez. Selon le contenu de vos fichiers, si vous utilisez un CMS tel que WordPress, ça peut vite tourner à la bouillie dans le résultat que vous allez obtenir :

Si vous n’aimez pas la bouillie, mais que vous voulez quand même en savoir plus sur la position de l’occurrence, j’ai bien sur une solution qui sera élégante et facile à lire.

Comment avoir le numéro de ligne dans le fichier avec une recherche grep

Plutôt que de fouiller dans la bouillie que nous avons vu juste au-dessus, il y a un paramètre très pratique pour afficher le numéro de ligne ou l’occurrence de texte est trouvée dans un fichier. Ce paramètre, c’est -n que vous pouvez alors utiliser comme ceci :

grep -r -n "</head>" /home/site/monsite.com/

Ainsi, avec le même dossier WordPress que j’ai utilisé juste avant, j’obtiens alors :

Pratique vous ne trouvez pas ? Difficile de faire plus clair !

Faire une recherche avec grep qui est insensible à la casse

L’option insensible à la casse ou case-insensitive en anglais si vous cherchez parfois sur un moteur de recherche, est une fonctionnalité courante dans de nombreux programmes informatiques. C’est bien évidemment le cas dans grep qui est un programme de recherche de texte. Lorsque l’option « insensible à la casse » est activée, la recherche de texte est effectuée sans tenir compte de la casse des lettres. Cela signifie que les lettres majuscules et minuscules sont traitées de la même manière lors de la recherche de texte.

Dans la commande grep, l’option insensible à la casse est activée avec le paramètre -i. Donc si vous voulez rechercher un texte sans tenir compte de la casse des lettres, vous pouvez utiliser la commande grep -i. La commande avec ce paramètre retournera toutes les occurrences du texte à rechercher, qu’elles soient en majuscules ou en minuscules.

C’est quelque chose qui peut servir, voici pour terminer comment tester cette fonction qui dans mon cas me renvoie toujours le même résultat vu plus haut :

grep -r -i -l  "</HeAd>" /home/site/monsite.com/

J’espère que j’ai réussi à vous aider avec la commande grep qui est un indispensable. Grep m’a rendu tellement de services sur mes serveurs sous Linux que je voulais absolument partager quelques exemples qui j’espère vont vous rendre service !

2 réflexions au sujet de “Grep : trouver tous les fichiers contenant une chaîne de caractères”

  1. Bonne initiation à grep

    quand j’utilise grep avec l’option -r, je n’ai jamais eu besoin de mettre de l’étoile à la fin et je n’ai pas d’erreur, ça depend peut-être de la version de grep.

    il y a aussi l’option -R (ou –dereference-recursive) qui va comme -r lire récursivement tous les fichiers à l’intérieur de chaque répertoire mais également suivre tous les liens symboliques, contrairement à -r.

    Répondre
    • Merci pour le message, c’est exact. J’ai testé sur un nouveau serveur et je n’ai pas eu d’erreur avec le chemin complet. J’ai modifié l’article en conséquence c’est encore plus simple comme ça

      Répondre

Laisser un commentaire