Grep
| 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.