Linux Commandes. · 13 min read · Sep 12, 2025

Comment utiliser grep pour rechercher des chaînes dans des fichiers sur le shell Linux

La commande GREP sur Linux - un aperçu

La commande grep dans Linux est un puissant utilitaire de recherche de texte qui permet aux utilisateurs de rechercher à travers des fichiers ou des flux de texte pour des motifs spécifiques. Elle signifie “ impression d’expressions régulières globales “, et elle prend en charge la recherche par des chaînes de texte simples et des expressions régulières plus complexes. La commande est souvent combinée avec d’autres commandes pour filtrer et affiner la sortie. Par défaut, grep renvoie toutes les lignes qui contiennent le motif. Cependant, elle offre diverses options pour personnaliser la recherche, telles que la sensibilité à la casse, le comptage des occurrences ou la recherche récursive à travers les répertoires. Cela en fait un outil essentiel pour les administrateurs système, les développeurs et quiconque travaillant avec de grands ensembles de données dans un environnement de type Unix.

La commande grep est principalement utilisée pour rechercher un texte ou un fichier pour des lignes qui contiennent une correspondance avec les mots/chaînes spécifiés. Par défaut, grep affiche les lignes correspondantes, et elle peut être utilisée pour rechercher des lignes de texte qui correspondent à une ou plusieurs expressions régulières, et elle ne sort que les lignes correspondantes.

Prérequis

La commande grep fait partie des utilitaires de base de toute distribution Linux, elle est donc préinstallée par défaut sur AlmaLinux, CentOS, Debian, Linux Mint, Ubuntu, RHEL et RockyLinux.

La syntaxe de base de la commande grep

La syntaxe de base de la commande grep est la suivante :

grep 'mot' nom_fichier
grep 'mot' fichier1 fichier2 fichier3
grep 'chaîne1 chaîne2'  nom_fichier
cat autre_fichier | grep 'quelque chose'
commande | grep 'quelque chose'
commande option1 | grep 'données'
grep --color 'données' nomFichier

Comment utiliser la commande grep pour rechercher dans un fichier

Dans le premier exemple, je vais rechercher l’utilisateur “tom” dans le fichier passwd de Linux. Pour rechercher dans le fichier /etc/passwd l’utilisateur “tom”, vous devez entrer la commande suivante :

grep tom /etc/passwd

Voici la sortie d’exemple :

tom:x:1000:1000:tom,,,:/home/tom:/bin/bash

Vous avez la possibilité d’instruire grep d’ignorer la casse des mots, c’est-à-dire de correspondre à abc, Abc, ABC, et toutes les combinaisons possibles avec l’option -i comme indiqué ci-dessous :

grep -i "tom" /etc/passwd

Utilisation récursive de grep

Si vous avez un tas de fichiers texte dans une hiérarchie de répertoires, par exemple, les fichiers de configuration Apache dans /etc/apache2/ et que vous souhaitez trouver le fichier où un texte spécifique est défini, utilisez l’option -r de la commande grep pour effectuer une recherche récursive. Cela effectuera une opération de recherche récursive à travers les fichiers pour la chaîne “197.167.2.9” (comme indiqué ci-dessous) dans le répertoire /etc/apache2/ et tous ses sous-répertoires :

grep -r "mydomain.com" /etc/apache2/

Alternativement, la commande suivante peut être utilisée :

grep -R "mydomain.com" /etc/apache2/

Voici les sorties d’exemple pour une recherche similaire sur un serveur Nginx :

grep -r "mydomain.com" /etc/nginx/  
/etc/nginx/sites-available/mydomain.com.vhost:        if ($http_host != "www.mydomain.com") {

Ici, vous verriez le résultat pour mydomain.com sur une ligne distincte précédée du nom du fichier (par exemple /etc/nginx/sites-available/mydomain.com.vhost) dans lequel il a été trouvé. L’inclusion des noms de fichiers dans les données de sortie peut être facilement supprimée en utilisant l’option -h (comme expliqué ci-dessous) : grep -h -R “mydomain.com” /etc/nginx/. Voici la sortie d’exemple :

grep -r "mydomain.com" /etc/nginx/  
if ($http_host != "www.mydomain.com") {

Utiliser grep pour rechercher uniquement des mots

Lorsque vous recherchez abc, grep correspondra à toutes sortes de choses, à savoir, kbcabc, abc123, aarfbc35, et beaucoup d’autres combinaisons sans respecter les limites de mots. Vous pouvez contraindre la commande grep à sélectionner uniquement ces lignes qui contiennent des correspondances pour former des mots entiers (ceux qui correspondent uniquement au mot abc), comme indiqué ci-dessous :

grep -w "abc" fichier.txt

Exemple :

Grep pour des mots entiers uniquement

Utiliser grep pour rechercher deux mots différents

Pour rechercher deux mots différents, vous devez utiliser la commande egrep comme indiqué ci-dessous :

egrep -w 'mot1|mot2' /chemin/vers/fichier

Compter les lignes pour les mots correspondants

La commande grep a la capacité de rapporter le nombre de fois qu’un motif particulier a été trouvé pour chaque fichier en utilisant l’option -c (compte) (comme indiqué ci-dessous) :

grep -c 'mot' /chemin/vers/fichier

De plus, les utilisateurs peuvent utiliser l’option ‘-n’ précédant chaque ligne de sortie avec le numéro de la ligne dans le fichier texte d’où elle a été obtenue (comme indiqué ci-dessous) :

grep -n 'root' /etc/passwd

Voici les sorties d’exemple :

1:root:x:0:0:root:/root:/bin/bash

Grep inversion de correspondance

Les utilisateurs peuvent utiliser l’option -v pour imprimer les inversions de la correspondance, ce qui signifie qu’elle ne correspondra qu’à ces lignes qui ne contiennent pas le mot donné. Par exemple, imprimez toutes les lignes qui ne contiennent pas le mot par en utilisant la commande suivante :

grep -v par /chemin/vers/fichier

Comment lister uniquement les noms des fichiers correspondants

Vous devez utiliser l’option -l pour lister les noms de fichiers dont le contenu mentionne un mot particulier, par exemple, le mot ‘primary’, en utilisant la commande suivante :

grep -l 'primary' *.c

Enfin, vous avez la possibilité de contraindre grep à afficher la sortie dans des couleurs spécifiques en utilisant la commande suivante :

grep --color root /etc/passwd

Voici les sorties d’exemple :

Comment faire en sorte que la commande grep gère plusieurs motifs de recherche

Il pourrait y avoir des situations où vous voudriez rechercher plusieurs motifs dans un fichier donné (ou un ensemble de fichiers). Dans de tels scénarios, vous devriez utiliser l’option de ligne de commande ‘-e‘ que grep fournit.

Par exemple, supposons que vous souhaitiez rechercher les mots “how”, “to” et “forge” dans tous les fichiers texte présents dans votre répertoire de travail actuel, alors voici comment vous pouvez le faire :

grep -e how -e to -e forge *.txt

Voici la commande en action :

L’option de ligne de commande ‘-e‘ aide également dans les scénarios où le motif commence par un tiret (-). Par exemple, si vous souhaitez rechercher, disons, “-how”, alors la commande suivante ne sera pas utile :

grep -how *.txt

C’est lorsque vous utilisez l’option de ligne de commande -e que la commande comprend exactement ce que vous essayez de rechercher dans ce cas :

grep -e -how *.txt

Voici les deux commandes en action :

Comment limiter la sortie de grep à un nombre particulier de lignes

Dans le cas où vous souhaitez limiter la sortie de grep à un nombre particulier de lignes, vous pouvez le faire en utilisant l’option de ligne de commande ‘-m‘. Par exemple, supposons que vous souhaitiez rechercher le mot “how” dans testfile1.txt qui contient les lignes suivantes :

Mais l’exigence est que grep doit arrêter la recherche après que 3 lignes contenant le motif recherché aient été trouvées. Donc, pour ce faire, vous pouvez exécuter la commande suivante :

grep "how" -m3 testfile1.txt

Voici la commande en action :

En continuant, voici ce que dit la page de manuel de la commande :

Si l'entrée est l'entrée standard d'un fichier régulier, et que NUM lignes correspondantes sont sorties, grep s'assure que l'entrée standard est positionnée juste après la dernière ligne correspondante avant de quitter, indépendamment de la présence de lignes de contexte suivantes. Cela permet à un processus appelant de reprendre une recherche.

Donc, par exemple, si vous avez un script bash qui a une boucle, et que vous souhaitez récupérer une correspondance par itération de boucle, alors utiliser ‘grep -m1’ fera le nécessaire.

Comment faire en sorte que grep obtienne des motifs à partir d’un fichier

Si vous le souhaitez, vous pouvez également faire en sorte que la commande grep obtienne des motifs à partir d’un fichier. L’option de ligne de commande -f de l’outil vous permet de le faire.

Par exemple, supposons que vous souhaitiez rechercher tous les fichiers .txt dans le répertoire actuel pour les mots “how” et “to”, mais que vous souhaitiez fournir ces chaînes d’entrée via un fichier nommé, disons, “input”, alors voici comment vous pouvez le faire :

grep -f input *.txt

Voici la commande en action :

Comment faire en sorte que grep n’affiche que les lignes qui correspondent complètement au motif de recherche

Jusqu’à présent, nous avons vu que par défaut grep correspond et affiche des lignes complètes qui contiennent des motifs de recherche. Mais si l’exigence est de faire en sorte que grep n’affiche que ces lignes qui correspondent complètement au motif recherché, alors cela peut être fait en utilisant l’option de ligne de commande ‘-x’.

Par exemple, supposons que le fichier testfile1.txt contient les lignes suivantes :

Et le motif que vous souhaitez rechercher est “how are you ?”. Donc, pour vous assurer que grep n’affiche que les lignes qui correspondent complètement à ce motif, utilisez-le de la manière suivante :

grep -x "how are you ?" *.txt

Voici la commande en action :

Comment forcer grep à ne rien afficher dans la sortie

Il pourrait y avoir des situations où vous n’avez pas besoin que la commande grep produise quoi que ce soit dans la sortie. Au lieu de cela, vous voulez juste savoir si une correspondance a été trouvée ou non en fonction du statut de sortie de la commande. Cela peut être réalisé en utilisant l’option de ligne de commande -q.

Bien que l’option -q réduise la sortie, le statut de sortie de l’outil peut être confirmé par la commande ‘echo $?’. Dans le cas de grep, la commande sort avec un statut ‘0’ lorsqu’elle réussit (c’est-à-dire qu’une correspondance a été trouvée), tandis qu’elle sort avec un statut ‘1’ lorsqu’aucune correspondance n’a été trouvée.

La capture d’écran suivante montre à la fois les scénarios réussis et infructueux :

Grep ne pas afficher de sortie

Comment faire en sorte que grep affiche le nom des fichiers qui ne contiennent pas le motif de recherche

Par défaut, la commande grep affiche le nom des fichiers contenant le motif de recherche (ainsi que les lignes correspondantes). Cela est assez logique, car c’est ce que l’on attend de cet outil. Cependant, il pourrait y avoir des cas où l’exigence pourrait être d’obtenir les noms de ces fichiers qui ne contiennent pas le motif recherché.

Ceci est également possible avec grep - l’option -L vous permet de le faire. Donc, par exemple, pour trouver tous ces fichiers texte dans le répertoire actuel qui ne contiennent pas le mot “how”, vous pouvez exécuter la commande suivante :

grep -L "how" *.txt

Voici la commande en action :

Comment supprimer les messages d’erreur produits par grep

Vous pouvez forcer grep à réduire tous les messages d’erreur qu’il affiche dans la sortie si vous le souhaitez. Cela peut être fait en utilisant l’option de ligne de commande -s. Par exemple, considérez le scénario suivant dans lequel grep produit une erreur/un avertissement lié au répertoire qu’il rencontre :

Donc, dans ce genre de scénario, l’option de ligne de commande -s aide. Voir ci-dessous.

Vous pouvez voir que l’erreur/l’avertissement a été réduit.

Comment faire en sorte que grep recherche récursivement dans les répertoires

Comme il est clair à partir de l’exemple utilisé dans le point précédent, la commande grep ne fait pas de recherche récursive par défaut. Pour vous assurer que votre recherche grep est récursive, utilisez l’option de ligne de commande -d et passez-lui la valeur ‘recurse’.

grep -d recurse "how" *

Remarque 1 : Le message d’erreur/d’avertissement lié au répertoire que nous avons discuté dans le point précédent peut également être réduit en utilisant l’option -d - tout ce que vous avez à faire est de passer la valeur ‘skip’ à celle-ci.

Remarque 2 : Utilisez l’option ‘–exclude-dir=[DIR]’ pour exclure les répertoires correspondant au motif DIR des recherches récursives.

Comment faire en sorte que grep termine les noms de fichiers avec un caractère NULL

Comme nous l’avons déjà discuté, l’option de ligne de commande -l de grep est utilisée lorsque vous souhaitez uniquement que l’outil affiche les noms de fichiers dans la sortie. Par exemple :

Maintenant, vous devez savoir que chaque nom dans la sortie ci-dessus est séparé/terminé par un caractère de nouvelle ligne. Voici comment vous pouvez le vérifier :

Redirigez la sortie vers un fichier, puis imprimez le contenu du fichier :

Ainsi, la sortie de la commande cat confirme la présence d’un caractère de nouvelle ligne entre les noms de fichiers.

Mais comme vous le savez peut-être déjà, le caractère de nouvelle ligne peut également faire partie d’un nom de fichier. Donc, lorsqu’il s’agit de cas où les noms de fichiers contiennent une nouvelle ligne et sont séparés/terminés par une nouvelle ligne, il devient difficile de travailler sur la sortie de grep (surtout lors de l’accès à la sortie via un script).

Il serait bon que le caractère de séparation/terminaison ne soit pas une nouvelle ligne. Eh bien, vous serez heureux de savoir que grep fournit une option de ligne de commande -Z qui garantit que les noms de fichiers sont suivis d’un caractère NULL et non d’une nouvelle ligne.

Donc, dans notre cas, la commande devient :

grep -lZ "how" *.txt

Voici comment nous avons confirmé la présence du caractère NULL :

Voici une option de ligne de commande connexe que vous devriez connaître :

 -z, --null-data  
Traitez l'entrée comme un ensemble de lignes, chacune terminée par un octet zéro (le caractère NUL ASCII) au lieu d'une nouvelle ligne. Comme l'option -Z ou --null, cette option peut être utilisée avec des commandes comme sort -z pour traiter des noms de fichiers arbitraires.

Comment utiliser GREP pour trouver des erreurs dans les fichiers journaux

Grep est le couteau suisse de l’administrateur Linux en matière de débogage des erreurs dans les services. La plupart des services Linux ont des fichiers journaux où ils rapportent des erreurs. Ces fichiers journaux peuvent être énormes, et grep est une commande polyvalente et rapide pour rechercher, par exemple, l’adresse IP d’un système connectant, une chaîne d’erreur ou l’adresse e-mail d’un utilisateur de messagerie affecté dans le mail.log.

Exemples :

Recherchez des connexions liées à une adresse e-mail spécifique. Ici, ‘[email protected]’ se trouve dans le fichier journal mail.log du serveur.

grep [email protected] /var/log/mail.log

Résultat :

Aug 22 09:45:10 mail dovecot: pop3-login: Login: user=<[email protected]>, method=PLAIN, rip=192.168.0.112, lip=78.46.229.46, mpid=17596, TLS, session=<3uoa5ffQovld3Uep>  
Aug 22 09:45:10 mail dovecot: pop3([email protected])<17596><3uoa5ffQovld3Uep>: Disconnected: Logged out top=0/0, retr=1/6647, del=1/1, size=6630  
Aug 22 09:45:10 mail dovecot: pop3-login: Login: user=<[email protected]>, method=PLAIN, rip=192.168.0.112, lip=78.46.229.46, mpid=17673, TLS, session=  
Aug 22 09:45:10 mail dovecot: pop3([email protected])<17673>: Disconnected: Logged out top=0/0, retr=0/0, del=0/0, size=0  
Aug 22 09:45:10 mail dovecot: pop3-login: Login: user=<[email protected]>, method=PLAIN, rip=192.168.0.112, lip=78.46.229.46, mpid=17868, TLS, session=  
Aug 22 09:45:10 mail dovecot: pop3([email protected])<17868>: Disconnected: Logged out top=0/0, retr=0/0, del=0/0, size=0  
Aug 22 09:45:10 mail dovecot: pop3-login: Login: user=<[email protected]>, method=PLAIN, rip=192.168.0.112, lip=78.46.229.46, mpid=17964, TLS, session=  
Aug 22 09:45:10 mail dovecot: pop3([email protected])<17964>: Disconnected: Logged out top=0/0, retr=0/0, del=0/0, size=0  
Aug 22 09:45:10 mail postfix/smtpd[6932]: NOQUEUE: reject: RCPT from unknown[1.2.3.4]: 504 5.5.2 <1.2.3.4>: Helo command rejected: need fully-qualified hostname; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<1.2.3.4>

Pour surveiller en continu un fichier journal pour des connexions pour cette adresse e-mail, combinez les commandes tail et grep comme ceci :

tail -f /var/log/mail.log | grep [email protected]

Pour quitter la fonction de surveillance, appuyez sur les touches [strg] + c.

Plus d’exemples de commandes GREP

Vous pouvez trouver encore plus d’exemples d’utilisation de cette commande Linux dans notre deuxième tutoriel sur la commande GREP.

  • Comment effectuer une recherche de motifs dans des fichiers en utilisant Grep
Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.