Mobile

Grep ? Trouver des bribes de code dans le terminal Linux

A propos de la grep… Un jour comme celui-ci, alors que je travaillais à l’aube, je me suis rendu compte que l’une des tâches consistait à trouver un extrait de code spécifique dans plus de 2 000 fichiers et à le remplacer par un autre extrait de code. Le problème était qu’il n’y avait pas d’indication évidente que le code en question se trouverait dans l’un de ces fichiers.

C’est-à-dire que je devrais probablement les télécharger tous sur ma machine via FTP et les ouvrir pour trouver quels fichiers contenaient cet extrait béni. C’est alors que je me suis souvenu d’une simple commande sous Linux qui peut être exécutée sur le terminal et qui est une main sur la roue non seulement pour les utilisateurs avancés, mais pour n’importe qui : le grep !

Qu’est-ce que le greep ?

Grep est une commande de fonction simple : elle recherche des chaînes de caractères dans des fichiers ou des répertoires et vous renvoie les fichiers sur lesquels la chaîne a été trouvée, en indiquant notamment la ligne où elle s’est produite. Cela vous semble idiot ? Réfléchissez bien : les possibilités offertes par grep sont presque infinies, même pour les utilisateurs ordinaires, et l’utilisation augmente beaucoup plus lorsque vous décidez de le joindre à d’autres commandes.

Imaginez par exemple que vous vouliez savoir rapidement quels ont été les derniers accès d’un numéro IP spécifique au serveur. Au lieu d’ouvrir le fichier journal ou d’utiliser un outil, vous pouvez utiliser grep dans le dernier fichier journal d’accès. Là, il vous renvoie les données sur l’écran.

  Dropbox arrive chez Blackberry

Disons que vous n’êtes pas exactement un utilisateur très organisé et que vous devez maintenant trouver où se trouvent des informations importantes dans un document perdu parmi des centaines d’autres documents. Utilisez le grep. Ou, enfin, imaginez que vous êtes un administrateur système qui a un besoin urgent d’au moins une heure de sommeil et qui dispose de près de 2000 fichiers pour vérifier l’existence d’un éventuel morceau de code.

Utilisez la grep, et couchez-vous tôt. ?

Comment fonctionne le grep ?

Dans le terminal, vous pouvez taper, par exemple :

grep “extrait à rechercher” file.txt

C’est-à-dire, d’abord la commande grep, puis la section que vous voulez trouver, et enfin le fichier où vous ferez la recherche. Bien qu’il ne soit pas obligatoire de mettre l’extrait de recherche entre guillemets, l’idéal est de le faire toujours, afin que Linux ne finisse pas par être confondu avec la syntaxe de la commande.

Mais… Que faire si je souhaite effectuer une recherche dans plusieurs dossiers, et non dans un seul dossier spécifique ?

N’ayez crainte, c’est encore simple :

grep “extrait à rechercher” *

Avec cela, grep va rechercher tous les fichiers dans le répertoire courant. Si vous le souhaitez, vous pouvez spécifier un autre répertoire :

  Microsoft OneDrive sauvegarde désormais votre bureau, vos documents et vos photos

grep “stretch to search” /var/www/*

Cela devient amusant, mais vous pouvez encore vous améliorer en utilisant certaines options de recherche. Disons que vous ne voulez pas seulement chercher dans ce répertoire, mais aussi dans les sous-répertoires. Utilisez l’option -R.

grep -R “stretch to search” /var/www/

Il recherchera l’extrait dans all les fichiers et répertoires qui se trouvent dans /var/www/. Notez que selon le nombre de dossiers et leur taille, cela peut prendre quelques minutes ou plusieurs heures. Utilisez donc cette option avec précaution. Si vous le souhaitez, vous pouvez effectuer une recherche sensible à la casse en utilisant l’option -i :

grep -i “extrait à rechercher” archive.txt

Ici, le grep renvoie tout résultat qui atteint le tronçon souhaité, qu’il y ait ou non des majuscules. Il peut s’agir de “Stretch To Search” ou de “TrReChO To PrOcUrE” ou de toute autre combinaison. Cela ne fera aucune différence. Mais vous pouvez également rechercher tous les fichiers ou lignes où l’extrait n’apparaît pas tre. Comment ? Utilisation de l’option -v

grep -v “extrait à rechercher” file.txt

Dans cet exemple, le grep renverra toute ligne du fichier qui ne contient pas le texte sélectionné. Intéressant, non ? Et pouvez-vous mettre toutes ces options ensemble ? Bien sûr qu’il le peut !

grep -Riv “stretch to search” /var/www/

Il est assez facile de comprendre ce que fait cette combinaison, n’est-ce pas ? Il recherche récursivement dans le dossier /var/www tous les fichiers et lignes où l’extrait sélectionné n’a pas été trouvé, qu’il soit en majuscules ou en minuscules.

  WhatsApp Desktop se bloque pour accéder aux fichiers sous Windows et MacOS

Pouvons-nous faire mieux ? Nous le pouvons. Que faire si l’extension que nous voulons rechercher existe dans de nombreux fichiers et finit par “éclater” la limite de caractères du terminal ? Ou plutôt : que faire si nous voulons transmettre le résultat à quelqu’un d’autre ? Il suffit de lancer la sortie de grep dans un fichier :

grep “extrait” arquivo.txt arquivoodesaida.txt

Le résultat complet du grep ira sur arquivoodesaida.txt, pas sur l’écran. Ainsi, vous pouvez le lire lentement, l’imprimer, l’envoyer à quelqu’un ou même l’utiliser dans un autre script. Une autre possibilité est d’utiliser grep pour filtrer la sortie des autres commandes. Disons que je dois lister la sortie de la commande ls (très utile si vous cherchez quelque chose de spécifique dans un dossier contenant de nombreux fichiers) :

ls | grep stretch

C’est tout.

Les ls ne renverront que les fichiers dont le nom contient “extrait”.

Plus facile que cela, seulement si le stagiaire le fait pour vous ! ?

Le grep est un outil puissant, et nous n’en abordons ici que l’essentiel. Si vous voulez en savoir plus, lisez le manuel de commande, et jouez un peu sur votre installation Linux. Vous découvrirez des possibilités qui vous faciliteront la vie. ?

A propos de l'auteur

Bernard

Actuellement responsable informatique dans une PME, je bosse dans le domaine depuis une vingtaine d'année maintenant. Fan inconditionnel de DBZ, et de la triologie Die Hard. #teamWindows sur Perlmol !

Laisser un commentaire