Comment trouver un mot spécifique dans un fichier sur Linux

Grep Folders

Par défaut, la plupart des outils de recherche se concentrent sur les noms de fichiers, et non sur le contenu des fichiers. Cependant, le programme de recherche GNU le plus célèbre, grep, va chercher à l’intérieur des fichiers avec les bons drapeaux. Ici, nous vous montrons comment vous pouvez trouver des mots spécifiques dans un fichier sur Linux.

Table des matières

  • Utilisation de grep pour trouver un mot spécifique dans un fichier
  • Utilisation de find pour trouver un mot spécifique dans un fichier
  • Utilisation d’ack pour trouver un mot spécifique dans un fichier
  • Vous voulez une interface graphique ? Utilisez Catfish
  • Questions fréquentes

À lire aussi : Comment trouver des fichiers volumineux dans Linux

Utilisation de grep pour trouver un mot spécifique dans un fichier

Par défaut, grep recherche dans le contenu des fichiers ainsi que dans leurs noms de fichiers. Il est inclus dans la majorité des systèmes Linux et est généralement identique à travers les distributions. Les programmeurs recherchant dans le contenu des fichiers de leurs projets peuvent préférer exécuter une commande différente, comme ack.

Selon la façon dont le fichier est encodé, grep peut ne pas toujours être en mesure de regarder à l’intérieur. Mais pour la plupart des formats textuels, grep peut analyser le texte du fichier pour le motif spécifié.

grep -rw '/path/to/search/' -e 'pattern'
  • Le drapeau -r définit grep en mode récursif, naviguant à travers tous les répertoires contenus dans le répertoire spécifié.
  • Le drapeau -w recherche des correspondances de mots entiers. Cela signifie que “red” ne correspondra qu’au véritable mot “red” plutôt qu’à une chaîne de lettres contenant celui-ci, comme “red undant” ou “ti red.” Il le fait en recherchant uniquement “red” entouré par ce qui est connu comme des caractères non constituants de mots (c’est-à-dire tout ce qui n’est pas une lettre, un numéro ou un underscore).
  • Le drapeau -e précède le motif à rechercher. Il prend en charge les expressions régulières par défaut.

Pour accélérer grep, vous pouvez utiliser les drapeaux --exclude et --include pour limiter la recherche à certains types de fichiers. Par exemple, --exclude='*.csv' ne recherchera pas dans les fichiers ayant l’extension .csv. --include='*.txt', en revanche, ne recherchera que dans les fichiers avec l’extension .txt. Le drapeau peut être ajouté immédiatement après la commande grep comme indiqué ci-dessous :

grep --exclude='*.csv' -Rw '/path/to/search' -e 'pattern'

Vous pouvez également exclure des répertoires spécifiés en suivant le format ci-dessous :

grep --exclude-dir='{dir1,dir2,*_old}' -Rw '/path/to/search' -e 'pattern'

Cette commande ne recherchera dans aucun des répertoires du répertoire de travail actuel nommés dir1, dir2 ou correspondant au motif *_old, les éliminant du processus de recherche. Elle exécutera la recherche spécifiée en mode récursif, correspondant à des mots entiers sur tous les autres fichiers du répertoire de travail actuel.

Drapeaux intéressants que vous pouvez utiliser avec grep

Maintenant que vous avez été correctement familiarisé avec grep et son fonctionnement, voici quelques drapeaux utiles que vous pouvez attacher à votre commande :

  • -i – Fait que grep effectue une recherche sans distinction de cas. Par exemple, rechercher “Kraken” renverra un résultat lorsque grep trouve des correspondances pour “kraken” ou “kRaken”.
  • -n – Montre les numéros de ligne à côté des correspondances. Cela est particulièrement utile pour les programmeurs ou les personnes recherchant dans de grands fichiers de configuration.
  • -R – Comme avec -r, grep effectuera une recherche récursive à travers tous les sous-dossiers, mais ce drapeau spécifique suivra les liens symboliques (raccourcis).
  • -s – Supprime les messages d’erreur. Si vous recevez de nombreuses erreurs distrayantes concernant des fichiers qui n’existent pas, ne peuvent pas être lus, ou ont des permissions inappropriées, passez cela afin que grep puisse se concentrer sur les correspondances qu’il trouve.

À lire aussi : Comment trouver un fichier dans Linux en utilisant la commande find

Utilisation de find pour trouver un mot spécifique dans un fichier

Bien que la syntaxe de la commande find soit plus compliquée que celle de grep, certains la préfèrent.

find . -name "*.php" -exec grep "pattern" {} ;

Cette commande utilisera le drapeau -exec de find pour transmettre les fichiers trouvés à grep pour la recherche. Avec un agencement astucieux de la syntaxe, vous pouvez utiliser la recherche dans le système de fichiers plus rapide de find pour localiser les types de fichiers spécifiques que vous souhaitez rechercher, puis les envoyer à grep pour rechercher à l’intérieur des fichiers.

Notez que find ne regarde que les noms de fichiers, pas le contenu. C’est pourquoi grep est nécessaire pour rechercher le texte et le contenu des fichiers. Les drapeaux normaux de grep devraient être pleinement opérationnels depuis l’intérieur du drapeau -exec.

Utilisation d’ack pour trouver un mot spécifique dans un fichier

La commande ack est probablement l’outil de recherche le plus rapide, mais elle n’est pas aussi populaire que grep. La commande ci-dessous recherchera dans le répertoire actuel.

ack 'pattern'

Si vous souhaitez rechercher dans un fichier ou un répertoire spécifique, vous pouvez ajouter ce fichier ou le chemin complet à votre recherche.

ack 'pattern' /path/to/file.txt

À lire aussi : Comment installer et gérer les versions de Python sous Linux

Vous voulez une interface graphique ? Utilisez Catfish

Si vous êtes allergique aux terminaux, toutes les distributions Linux populaires offrent Catfish, une application GUI polyvalente qui vous permet de rechercher des fichiers et leur contenu pour une chaîne spécifique. Elle n’est pas aussi avancée que les commandes discutées ici, mais elle fournit un service précieux aux personnes qui préfèrent une interface graphique.

Grep Catfishgui

Pour rechercher dans le contenu des fichiers un mot spécifique, cliquez sur le menu en haut à droite de Catfish et cliquez sur “Rechercher dans le contenu des fichiers”.

Après avoir tout configuré, tapez ce que vous souhaitez rechercher dans la barre supérieure et appuyez sur Entrée. C’est tout !

À lire aussi : Les différences entre Su, Sudo Su, Sudo -s et Sudo -i

Questions fréquentes

Comment arrêter une recherche grep avant qu’elle ne soit terminée ?

Pour arrêter tout processus en cours dans votre terminal, il suffit d’appuyer sur Ctrl + C sur votre clavier. Cela envoie un signal pour terminer le processus en cours. C’est aussi pourquoi vous ne pouvez pas utiliser les raccourcis normaux de copier/coller depuis un émulateur de terminal.

Existe-t-il des gestionnaires de fichiers qui recherchent dans le contenu des fichiers ?

Si vous utilisez l’environnement de bureau KDE Plasma, son gestionnaire de fichiers par défaut (Dolphin) a déjà cette capacité. Lorsque vous cliquez sur le bouton de recherche pour chercher des fichiers, il y a une option pour choisir entre les noms de fichiers et le contenu des fichiers sous la barre de recherche.

Il vous suffit de cliquer sur “Contenu” si vous souhaitez rechercher des mots dans des fichiers. Ce ne sera pas aussi avancé qu’utiliser grep, mais cela fait le travail.

Y a-t-il d’autres utilisations pour grep ?

Grep n’est pas seulement destiné à rechercher dans votre système de fichiers ! Étonnamment, vous pouvez l’utiliser à travers presque n’importe quelle commande pour rechercher dans sa sortie au lieu d’avoir à trouver quelque chose manuellement.

Grep peut être utilisé pour filtrer la sortie de commande afin de vous montrer des éléments qui sont plus pertinents pour vous. Expérimentez suffisamment avec et vous maîtriserez finalement l’art de diagnostiquer et de mieux connaître votre ordinateur !

Tous les screenshots par Miguel Leiva-Gomez.