Objectifs
- Rechercher un motif simple dans un fichier ou une sortie de commande avec
grep. - Utiliser les options les plus courantes de
grep(-i,-v,-c,-r,-E). - Comprendre les bases des expressions régulières (regex) pour des recherches plus puissantes.
- Filtrer efficacement du texte en utilisant des ancrages (
^,$) et des classes de caractères.
Explications détaillées
Notions clés
grep : Le couteau suisse de la recherche
grep (Global Regular Expression Print) est un outil fondamental qui lit du texte (depuis un fichier ou l’entrée standard) et affiche les lignes qui correspondent à un motif donné.
grep "mon_motif" mon_fichier.txt
Les options indispensables
-i: Ignore case. Ignore la différence entre majuscules et minuscules.-v: Invert match. Affiche toutes les lignes qui ne correspondent pas au motif.-c: Count. N’affiche pas les lignes, mais seulement le nombre de lignes qui correspondent.-rou-R: Recursive. Recherche dans tous les fichiers d’un dossier et de ses sous-dossiers.-l: List files. Affiche seulement le nom des fichiers qui contiennent le motif.-E: Extended regex. Active les expressions régulières étendues, ce qui simplifie la syntaxe pour certains opérateurs. C’est l’équivalent de l’ancienne commandeegrep.
Introduction aux Expressions Régulières (Regex)
Une expression régulière est un “mini-langage” pour décrire des motifs de recherche. Voici les bases :
.(point) : Représente n’importe quel caractère unique.a.ccorrespond àaac,abc,axc, etc.*(astérisque) : L’élément précédent peut apparaître zéro ou plusieurs fois.a*correspond à “,a,aa,aaa…^(accent circonflexe) : Début de la ligne.^Bonjourne correspond qu’aux lignes qui commencent par “Bonjour”.$(dollar) : Fin de la ligne.fin$ne correspond qu’aux lignes qui se terminent par “fin”.[](crochets) : Classe de caractères. Correspond à un des caractères listés.[abc]:a,b, ouc.[0-9]: n’importe quel chiffre.[^0-9]: tout ce qui n’est pas un chiffre.
\(backslash) : Échappe un caractère spécial.\.correspond à un point littéral.
Avec l’option -E (egrep), la syntaxe est plus riche :
+: Une ou plusieurs fois l’élément précédent.a+correspond àa,aa, etc., mais pas à une chaîne vide.?: Zéro ou une fois.colou?rcorrespond àcoloretcolour.|: OU logique.(chat|chien)correspond à “chat” ou “chien”.
Syntaxe / Usages
# Chercher un mot dans un fichier, insensible à la casse
grep -i "erreur" /var/log/syslog
# Compter le nombre de fois où l'utilisateur 'admin' est mentionné
grep -c "admin" logs.txt
# Lister tous les fichiers de configuration contenant l'adresse IP '192.168.1.1'
grep -r -l "192.168.1.1" /etc/
# Afficher les lignes qui NE commencent PAS par un commentaire '#'
grep -v "^#" config.conf
# Chercher les mots "error" ou "warning" (avec regex étendues)
grep -E "error|warning" application.log
Exemples
# Créez un fichier de test 'data.txt'
printf "pomme\npoire\nbanane\nPoMme Verte\n" > data.txt
# 1. Recherche simple
grep "poire" data.txt
# -> poire
# 2. Recherche insensible à la casse
grep -i "pomme" data.txt
# -> pomme
# -> PoMme Verte
# 3. Lignes ne contenant pas "po"
grep -v "po" data.txt
# -> banane
# 4. Lignes commençant par "p"
grep "^p" data.txt
# -> pomme
# -> poire
# 5. Combiner avec un pipe
# Lister les processus et ne garder que ceux liés à 'bash'
ps aux | grep "bash"
Bonnes pratiques
- Toujours mettre le motif entre guillemets. Cela empêche le shell d’interpréter les caractères spéciaux (
*,$, etc.) avant de les passer àgrep. - Utilisez
grep -E(ouegrep) par défaut. La syntaxe des expressions régulières étendues est plus intuitive et puissante. - Commencez avec un motif simple et affinez-le progressivement. La maîtrise des regex vient avec la pratique.
Pièges courants
- Le motif est trop large :
grep "user"trouvera aussisuperuser. Pour un mot exact, utilisez-w(grep -w "user") ou des ancrages de mots (grep "\\<user\\>"). - Oublier d’échapper les caractères spéciaux : Pour chercher un point littéral, il faut utiliser
\.. Sinon,.correspondra à n’importe quel caractère. - Confondre les syntaxes Regex : Certains opérateurs comme
+ou?n’ont pas de signification spéciale en regex de base (sans-E) à moins d’être échappés (\+,\?), ce qui est source de confusion.
Exercices
-
Filtrage de logs :
- Créez un fichier
mon.logavec quelques lignes, dont certaines contenantINFO,WARN, etERROR. - Écrivez une commande pour afficher uniquement les lignes contenant
ERROR. - Écrivez une commande pour compter le nombre de lignes contenant
WARN.
- Créez un fichier
-
Recherche dans le système :
- Utilisez
greppour trouver la ligne contenant votre nom d’utilisateur dans le fichier/etc/passwd. - Utilisez
greppour lister tous les fichiers dans/etc/qui contiennent le motnetwork(insensible à la casse).
- Utilisez
-
Expression régulière :
- Créez un fichier avec les lignes suivantes :
test.txt,image.jpg,test.log,photo.jpeg. - Écrivez une commande
grep -Equi n’affiche que les lignes correspondant à des images (.jpgou.jpeg).
- Créez un fichier avec les lignes suivantes :