Guide complet de la commande grep sous Ubuntu

Présentation

Dans un environnement Linux, la commande grep est un outil indispensable pour analyser des fichiers texte volumineux ou des logs système. Dans cet article, nous explorerons les techniques pratiques essentielles pour exécuter grep dans le terminal Ubuntu, trouver rapidement les chaînes recherchées et interpréter précisément les résultats obtenus.

Recherche de chaînes de base et option d’insensibilité à la casse (-i)

Exécutez la commande mkdir -p ~/grep_demo && cd ~/grep_demo pour créer un espace de travail dédié à la pratique de la commande grep et vous y déplacer.

mkdir -p ~/grep_demo && cd ~/grep_demo

Exécutez la commande echo -e 'Ubuntu Linux Server\nubuntu desktop\nDebian GNU/Linux' > sample.txt pour créer un fichier texte contenant des exemples de chaînes servant aux tests de recherche.

echo -e ‘Ubuntu Linux Server\nubuntu desktop\nDebian GNU/Linux’ > sample.txt

La commande grep recherche un motif ou une chaîne spécifique dans un fichier ou un texte et affiche les lignes correspondantes.
Par défaut, la casse est strictement respectée ; seules les lignes contenant exactement Ubuntu seront donc trouvées.
⚙️ [Options principales]

-i : Ignore la distinction majuscule/minuscule lors de la recherche du motif.
-v : Inverse la sélection pour afficher uniquement les lignes ne correspondant pas au motif spécifié.
-n : Affiche le numéro de ligne avec le contenu correspondant.
-c : Compte et affiche uniquement le nombre total de lignes correspondantes.
-r : Parcourt récursivement tous les fichiers situés dans les sous-répertoires.
-l : Liste uniquement les noms des fichiers contenant des correspondances.
-E : Effectue la recherche en utilisant des expressions régulières étendues (ERE).

grep ‘Ubuntu’ sample.txt

L’ajout de l’option -i permet d’effectuer une recherche insensible à la casse.
Ainsi, les lignes contenant Ubuntu avec une majuscule et ubuntu en minuscules sont toutes deux affichées.

grep -i ‘ubuntu’ sample.txt

Affichage des numéros de ligne (-n) et inversion de la recherche (-v)

Exécutez la commande echo -e 'INFO: Service started\nERROR: Connection timeout\nINFO: Request handled\nERROR: Disk full' > app.log pour générer des données de log fictives destinées à l’analyse pratique.

echo -e ‘INFO: Service started\nERROR: Connection timeout\nINFO: Request handled\nERROR: Disk full’ > app.log

L’utilisation de l’option -n affiche le numéro de ligne à côté des lignes correspondant au motif de recherche.
Le numéro de ligne et le contenu incluant la chaîne ERROR sont affichés simultanément, ce qui permet d’identifier rapidement l’emplacement du problème.

grep -n ‘ERROR’ app.log

L’utilisation de l’option -v inverse le résultat pour n’afficher que les lignes qui ne correspondent pas au motif spécifié.
Il est ainsi possible d’exclure les entrées INFO correspondant à un état normal et de n’isoler que les lignes liées aux erreurs.

grep -v ‘INFO’ app.log

Recherche récursive dans les sous-répertoires (-r) et affichage des seuls noms de fichiers (-l)

Exécutez la commande mkdir -p ~/grep_demo/logs/archive afin de créer une arborescence de sous-répertoires d’archivage pour tester la recherche récursive.

mkdir -p ~/grep_demo/logs/archive

Exécutez la commande echo 'database error' > ~/grep_demo/logs/db.log pour créer un fichier de log d’erreur de base de données à utiliser dans le test de recherche.

echo ‘database error’ > ~/grep_demo/logs/db.log

Exécutez la commande echo 'cache hit' > ~/grep_demo/logs/cache.log pour créer un fichier de log de cache représentant une opération normale.

echo ‘cache hit’ > ~/grep_demo/logs/cache.log

Exécutez la commande echo 'fatal error occurred' > ~/grep_demo/logs/archive/old.log afin de générer un ancien fichier de log d’erreur pour tester l’exploration des sous-répertoires.

echo ‘fatal error occurred’ > ~/grep_demo/logs/archive/old.log

L’utilisation conjointe des options -r et -n permet d’explorer récursivement les sous-répertoires tout en affichant les numéros de ligne des correspondances.
Les chemins de fichiers, les numéros de ligne et les contenus incluant la chaîne error situés dans le répertoire logs et son sous-répertoire archive sont tous affichés.

grep -rn ’error’ ~/grep_demo/logs

En combinant l’option -l sous la forme -rl, la commande n’affiche que la liste des chemins des fichiers contenant le motif, sans afficher leur contenu.
C’est particulièrement pratique pour isoler rapidement les seuls fichiers où l’occurrence error est présente parmi une grande quantité de logs.

grep -rl ’error’ ~/grep_demo/logs

Affichage du contexte environnant (-A, -B, -C) et coloration syntaxique

Exécutez la commande echo -e 'Step 1: Init\nStep 2: Load Config\nStep 3: Critical Failure\nStep 4: Cleanup\nStep 5: Exit' > process.log pour créer un fichier de log d’exemple afin d’observer la progression des étapes et le contexte des erreurs.

echo -e ‘Step 1: Init\nStep 2: Load Config\nStep 3: Critical Failure\nStep 4: Cleanup\nStep 5: Exit’ > process.log

L’utilisation des options -B et -A permet d’afficher un nombre défini de lignes situées avant (Before) et après (After) la ligne correspondante.
Grâce à l’option --color=always, le terme correspondant Critical Failure est mis en évidence en couleur, tandis que la ligne précédente et les deux lignes suivantes sont affichées, ce qui permet de comprendre le déroulement des opérations avant et après l’erreur.

grep –color=always -B 1 -A 2 ‘Critical Failure’ process.log

L’option -C permet d’afficher en une seule fois un nombre identique de lignes avant et après (Context) la ligne correspondante.
La ligne précédant immédiatement et celle suivant immédiatement Critical Failure s’affichent en même temps, offrant une vue concise du contexte essentiel.

grep –color=always -C 1 ‘Critical Failure’ process.log

Nous avons passé en revue les aspects fondamentaux de la commande grep sous Ubuntu, des options de recherche de base jusqu’aux méthodes d’analyse de logs en conditions réelles.
N’hésitez pas à intégrer activement ces modèles dans vos sessions de terminal quotidiennes pour optimiser significativement votre efficacité opérationnelle.