Grep

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Recherche de motifs dans du texte
Commande grep
Options clés -i -v -r -l -c -E -P -w -n
Contexte -A/-B/-C pour le contexte des lignes
Voir aussi Sed, Awk (traitement du texte trouvé)

grep recherche des lignes correspondant à un motif (texte fixe ou expression régulière) dans un ou plusieurs fichiers, ou sur l'entrée standard. C'est l'outil de base pour explorer des logs, filtrer des configurations ou vérifier la présence d'une chaîne dans un ensemble de fichiers.

Options de base

grep "motif" fichier              # lignes contenant "motif"
grep -i "motif" fichier           # recherche insensible à la casse
grep -v "motif" fichier           # inverse : lignes NE contenant PAS "motif"
grep -w "motif" fichier           # ne matche que le mot entier (pas une sous-chaîne)
grep -n "motif" fichier           # affiche le numéro de ligne
grep -c "motif" fichier           # compte les lignes correspondantes (sans les afficher)
grep -l "motif" *.conf            # liste seulement les noms de fichiers qui matchent
grep -L "motif" *.conf            # liste les fichiers qui NE matchent PAS

Recherche récursive

grep -r "motif" /etc               # parcourt récursivement tous les fichiers
grep -rn "motif" /etc               # idem, avec les numéros de ligne
grep -rl "motif" /etc               # idem, uniquement les noms de fichiers
grep -r --include="*.log" "motif" /var/log   # limite la recherche à un motif de nom de fichier
grep -r --exclude-dir=.git "motif" .         # exclut un répertoire

Expressions régulières : -E et -P

Par défaut, grep utilise les expressions régulières basiques (BRE), où certains métacaractères doivent être échappés. -E (ou la commande egrep, dépréciée) active les expressions régulières étendues (ERE), plus lisibles. -P active la syntaxe Perl (PCRE), la plus riche (classes comme \d, \w, quantificateurs non gourmands, lookaheads).

grep -E "erreur|warning" fichier.log        # alternative (OR) sans échapper le pipe
grep -E "^[0-9]{3}-[0-9]{4}$" fichier       # quantificateurs {n,m} sans échappement
grep -P "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}" fichier   # classes PCRE (\d, \w...)

Contexte autour des correspondances

grep -A 3 "motif" fichier          # affiche aussi les 3 lignes après chaque correspondance
grep -B 3 "motif" fichier          # affiche aussi les 3 lignes avant chaque correspondance
grep -C 3 "motif" fichier          # combine les deux : 3 lignes avant ET après

Exemples pratiques

Nettoyer un fichier des lignes vides et des commentaires (ex. /etc/sudoers) :

grep -Ev '^\s*(#|$)' /etc/sudoers

Extraire toutes les adresses email trouvées dans un ensemble de fichiers :

grep -srhoE '[[:alnum:].+_-]+@[[:alnum:].-]+\.[[:alpha:]]+' /etc

Repérer les adresses IPv4 dans des fichiers de configuration ou de logs :

grep -rEo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /var/www/

⚠️ -o restreint l'affichage à la seule partie de la ligne qui correspond au motif, ce qui évite d'avoir à extraire l'IP ou l'email au milieu du reste de la ligne.

Voir aussi

  • Sed — modifier le texte trouvé par grep, en flux
  • Awk — extraire ou transformer des colonnes dans les lignes trouvées