0 Votes

grep

Modifié par john le 2026/09/20 20:13

Présentation

La commande grep (Global Regular Expression Print) permet de rechercher des chaînes de caractères dans des fichiers ou en sortie de commande.

C’est l’outil idéal pour filtrer, explorer, et déboguer du texte dans le terminal.


Syntaxe de base

grep "motif" fichier.txt

Exemples simples

Rechercher une ligne contenant ssh :

grep ssh /var/log/auth.log

Afficher les lignes contenant root dans un fichier :

grep root /etc/passwd

Options courantes

OptionDescription
-iIgnore la casse
-nAffiche le numéro de ligne
-r ou -RRecherche récursive dans les dossiers
-lAffiche seulement les noms de fichiers contenant le motif
-LAffiche les fichiers ne contenant pas le motif
-vAffiche tout sauf les lignes contenant le motif
-cCompte les lignes correspondantes
-wCherche le mot entier
-A n / -B n / -C nAffiche n lignes après, avant, ou autour
color=autoColore les correspondances
-ePermet de spécifier plusieurs motifs
-EActive les expressions régulières étendues
-FTraite le motif comme du texte brut, sans expression régulière

Recherche récursive

grep -rn "motif" /etc

Affiche les fichiers, numéros de lignes, et lignes contenant le motif dans tout /etc.


Recherche insensible à la casse

grep -i "linux" fichier.txt

Exclusion de motif

grep -v "erreur" journal.log

Affiche toutes les lignes ne contenant pas le mot « erreur ».


grep avec des tubes

ps aux | grep nginx

Permet de filtrer une sortie de commande. Le grep lui-même apparaît dans le résultat ; pour l'éviter :

ps aux | grep -v grep | grep nginx
# ou
pgrep -a nginx

grep et les expressions régulières

Les caractères +, ?, |, ( et ) ne sont reconnus qu'avec -E :

grep -E "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" fichier.txt

Extrait les lignes contenant une adresse de courriel (version simplifiée).

Quelques motifs utiles :

MotifSens
^motLigne commençant par « mot »
mot$Ligne finissant par « mot »
^$Ligne vide
[0-9]{3}Trois chiffres (avec -E)

Astuce grep et find

Rechercher un motif dans tous les fichiers .log :

grep -rn --include="*.log" "erreur" .
# ou
find . -name "*.log" -exec grep -Hn "erreur" {} +

La première forme est plus rapide ; la seconde reste utile quand il faut d'autres critères de find.


Liens internes