Exemples de commandes grep sous Linux
Grep est une commande utile pour vous aider à rechercher et trouver rapidement le contenu d'un fichier.
"Tout est un fichier sous Linux" et c'est la raison pour laquelle la plupart des utilisateurs de Linux passent beaucoup de temps à bricoler le contenu du fichier.
C'est là que l'importance de la commande grep joue un rôle crucial en vous permettant de rechercher et faire correspondre des modèles dans des fichiers texte ou d'obtenir un résultat.
Donc, dans ce tutoriel, je vais vous expliquer tous les éléments essentiels nécessaires pour apprendre la commande grep :
La syntaxe de base et les indicateurs populaires de la commande
-
Exemples pratiques de la commande
Questions pratiques pour la commande grep
Voici comment utiliser la commande grep
Pour utiliser la commande grep, il est important de connaître la syntaxe.
Voici donc la syntaxe de base de la commande grep :
grep [OPTIONS] PATTERN <Filename>
Ici,
[OPTIONS]
: en utilisant l'ensemble d'options donné, vous pouvez modifier le comportement par défaut de la commande grep, par exemple en utilisant le-i
qui permet une recherche insensible à la casse.PATTERN
: c'est ici que vous spécifiez le texte que vous recherchez à partir du fichier ou de la sortie de la commande. Il peut également s'agir d'une expression régulière pour des modèles plus complexes.
: Ici, vous spécifiez le fichier dans lequel vous souhaitez rechercher et si vous ne spécifiez aucun fichier, la recherche sera effectuée à partir de l'entrée standard.
Jetons maintenant un coup d'œil à quelques options couramment utilisées avec la commande grep :
-i
Ignore le respect de la casse dans la recherche.
-v
-
Imprime des lignes qui ne correspondent pas au motif.
-n
Affiche le numéro de ligne de chaque ligne correspondante.
-w
Correspond uniquement à des mots entiers, pas à des parties de mots.
-c
Compte le nombre de lignes correspondantes, n'imprime pas les lignes.
-r
Recherche récursive dans les répertoires.
-A n
Imprime n lignes après chaque ligne correspondante.
-B n
Imprime n lignes avant chaque ligne correspondante.
-C n
Imprime n lignes avant et après chaque ligne correspondante.
-f Filename
Lit les modèles de recherche à partir d’un fichier, un par ligne.
-o
Imprime uniquement la partie correspondante de la ligne.
Vous vous demandez peut-être : que se passe-t-il lorsque vous utilisez la commande grep sans aucune option ? Eh bien, il imprime simplement les lignes contenant le motif.
Par exemple, ici, je souhaite rechercher le mot-clé error
dans le fichier nommé error.log
, et sans aucune option supplémentaire, cela m'a donné ce résultat :
As-tu vu ça? Il met en évidence le motif trouvé et imprime également les lignes contenant le motif.
Pour rendre ce tutoriel facile à suivre, j'utiliserai un exemple de fichier nommé error.log
qui comprend les lignes suivantes :
This is a log file with various messages.
An error occurred at 10:00 AM.
The system encountered an unexpected issue.
Everything is working normally now.
Another error message at 11:30 AM.
Warning: Please check disk usage.
Log closed at 12:00 PM
Exemples pratiques de la commande grep
Dans cette section, je présente divers exemples de la commande grep afin que vous puissiez avoir une meilleure idée de la façon dont vous pouvez utiliser la commande grep.
1. Recherche insensible à la casse
Par défaut, les modèles de commande grep sont sensibles à la casse et, pour la plupart, cela fonctionne bien, mais vous souhaiterez peut-être désactiver la sensibilité à la casse.
Pour ce faire, vous pouvez utiliser l'indicateur -i
comme indiqué ici :
grep -i PATTERN Filename
Pour démontrer cela, j'utiliserai ERROR
comme modèle de recherche, et il affichera les modèles correspondants quelle que soit la sensibilité à la casse :
grep -i ERROR error.log
2. Afficher n
lignes avant et après les lignes correspondantes
Par défaut, la commande grep n'imprime que les lignes correspondantes, mais vous souhaitez parfois connaître le contexte des lignes correspondantes. Vous imprimez donc les lignes avant et après les lignes correspondantes.
Imprimer n
lignes avant les lignes correspondantes
Pour imprimer n nombre de lignes avant les lignes correspondantes, vous utilisez l'indicateur -B
et spécifiez le nombre de lignes à imprimer comme indiqué ici :
grep -B <number_of_lines> PATTERN Filename
Par exemple, ici, j'ai imprimé la ligne avant chaque ligne correspondante :
grep -B 1 error error.log
Imprimer n
lignes après les lignes correspondantes
Pour imprimer le nombre n de lignes après les lignes correspondantes, vous utilisez l'indicateur -A
et spécifiez le nombre de lignes comme indiqué ici :
grep -A <number_of_lines> PATTERN Filename
Si je souhaite imprimer une ligne après les lignes correspondantes, j'utiliserai ce qui suit :
grep -A 1 error error.log
Imprimer n
lignes avant et après les lignes correspondantes
Si vous souhaitez imprimer des lignes avant et après, alors vous utilisez l'indicateur -C
et spécifiez le nombre de lignes à imprimer comme indiqué ici :
grep -C <number_of_lines> PATTERN Filename
Disons que je souhaite afficher 1 ligne avant et 1 ligne après la ligne du motif correspondant, alors j'utiliserai ce qui suit :
grep -C 1 error error.log
3. Afficher les lignes qui ne correspondent pas au motif
La plupart du temps, vous utiliserez la commande grep pour faire correspondre des modèles, mais elle vous permettra également d'inverser les résultats de la recherche.
En termes simples, vous spécifiez le terme de recherche, et il imprimera les lignes qui ne correspondent pas au modèle donné et à cette fin, vous utilisez l'indicateur -v
comme indiqué ici :
grep -v PATTERN Filename
Par exemple, si je souhaite imprimer chaque ligne qui ne contient pas le terme error
, j'utiliserai ce qui suit :
grep -v error error.log
4. Afficher le nombre de lignes correspondantes
Pour afficher le nombre de lignes correspondantes, il vous suffit d'utiliser le flag -n
comme indiqué :
grep -n PATTERN Filename
5. Afficher le nombre total de résultats correspondants
Si vous souhaitez connaître le nombre de résultats correspondants, vous pouvez utiliser l'indicateur -c
comme indiqué :
grep -c PATTERN Filename
Par exemple, ici, je voulais savoir combien de fois le terme error
est mentionné dans le fichier error.log
, j'ai donc utilisé la commande suivante :
grep -c error error.log
6. Rechercher un modèle dans plusieurs fichiers
Si vous souhaitez rechercher un modèle à partir de plusieurs fichiers, il vous suffit alors d'ajouter plusieurs fichiers à rechercher, comme indiqué ici :
grep PATTERN File1 File2
Par exemple, ici, j'ai recherché la chaîne error
à partir de deux fichiers : error.log
et error.txt
et cela m'a donné le résultat suivant :
grep error error.log error.txt
7. Modèle de recherche dans chaque fichier du répertoire
Si vous souhaitez rechercher un modèle spécifique dans chaque fichier présent dans le répertoire, vous pouvez utiliser la commande grep de manière récursive et elle recherchera le modèle donné dans chaque fichier présent dans ce répertoire spécifique.
Pour activer la recherche récursive, utilisez l'indicateur -r
comme indiqué :
grep -r PATTERN <Directory or path to directory>
Par exemple, ici, j'ai recherché la chaîne error
dans le répertoire courant :
grep -r error .
8. Recherchez le mot exact
Par défaut, la commande grep imprimera tous les modèles correspondants, ce qui n'est pas toujours ce que vous souhaitez. Cela semble étrange ? Permettez-moi de vous expliquer.
Supposons que vous souhaitiez rechercher le terme Orange
mais si le fichier spécifique contient également le terme Oranges
alors la ligne contenant le terme Oranges
sera également affiché comme sortie.
Pour surmonter ce problème, vous pouvez utiliser l'option -w
et spécifier le modèle :
grep -w PATTERN Filename
Par exemple, ici, j'ai l'intention de trouver le terme err
donc j'utiliserai l'indicateur -w
et je vous montrerai également la différence entre ce qui se passe lorsque vous n'utilisez pas il.
grep -w err error.log
Lorsque j'ai utilisé l'indicateur -w
pour trouver la chaîne err
, il n'a renvoyé aucun résultat, car elle n'existe pas.
Mais lors de la deuxième tentative où j'ai supprimé l'indicateur -w
, il a renvoyé deux résultats affichant un contenu où le modèle de chaîne fait partie d'une autre chaîne (non séparée).
9. Utilisez le modèle regex pour la recherche avancée
Si la recherche normale ne rend pas justice, vous pouvez utiliser le modèle regex (séquence de caractères) pour avoir un meilleur contrôle sur votre recherche. Vous pouvez utiliser l'indicateur -e
pour utiliser le modèle regex, tandis que -E
vous permet d'utiliser l'expression régulière étendue :
grep -e/-E PATTERN Filename
Par exemple, j'ai utilisé ici l'expression régulière étendue pour trouver deux voyelles utilisées ensemble dans le fichier :
grep -e '[aeiouAEIOU]{2}' error.log
Lecture suggérée 📖
10. Spécifiez plusieurs modèles à l'aide de l'opérateur OR
Vous pouvez utiliser l'opérateur OR pour spécifier plusieurs modèles, ce qui est très utile lorsque vous souhaitez rechercher efficacement plusieurs modèles.
Pour spécifier plusieurs modèles, utilisez l'opérateur OR (|) de la manière suivante :
grep 'PATTERN_1\|PATTERN_2' Filename
Disons que je souhaite rechercher deux modèles : erreur
et S'il vous plaît
, j'utiliserai alors ce qui suit :
grep 'error\|Please' error.log
Questions pratiques 📓
La pratique est la meilleure façon d'apprendre, et c'est pourquoi je suis sur le point de partager quelques questions pratiques pour la commande grep.
Vous pouvez utiliser le fichier error.log
que j'ai mentionné au début de ce guide pour résoudre les questions suivantes :
Recherchez la chaîne
error
dans chaque fichier présent dans votre répertoire de travail.Recherchez les lignes qui ne contiennent pas le terme
succès
.Recherchez les lignes dans un fichier qui contiennent
erreur
ouproblème
.Recherchez le terme
log
en désactivant la recherche sensible à la casse et en redirigeant la sortie vers un fichier.Comment imprimer uniquement les 2 derniers résultats en ignorant tout le reste ? (Indice : utilisez la commande tail)
Si vous rencontrez des difficultés pour résoudre les problèmes ci-dessus, contactez-nous via les commentaires ou postez votre requête sur notre forum communautaire.
Vous pouvez télécharger une aide-mémoire sur la commande grep pour plus d'exemples et d'informations :
Êtes-vous un utilisateur avancé ? Essayez Ripgrep
La commande ripgrep fait tout ce que fait la commande grep mais présente des avantages supplémentaires tels que des performances et des fonctionnalités, notamment la possibilité de rechercher dans le fichier zip.
Cela paraît bien? Voici comment installer et utiliser ripgrep sous Linux :
De plus, si vous êtes nouveau sur Linux, je vous suggère de consulter également notre tutoriel de commandes pour débutants.
💬Partagez vos réflexions sur la commande, votre expérience avec celle-ci et que préférez-vous comme alternative à grep ?