Les expressions régulières de base utilisées sous Bash
Voici une documentation comparant les expressions régulières de base (BRE, Basic Regular Expressions) et les expressions régulières étendues (ERE, Extended Regular Expressions) utilisées sous Bash, notamment avec des outils comme grep, sed, et awk.
Métacaractères communs aux BRE et ERE
Métacaractères
Signification
.
Correspond à n’importe quel caractère.
*
Correspond à 0 ou plusieurs occurrences du caractère ou groupe précédent.
^
Correspond au début d’une ligne.
$
Correspond à la fin d’une ligne.
[...]
Correspond à un caractère parmi ceux listés entre les crochets.
[^...]
Correspond à un caractère non listé entre les crochets.
\
Échappe un métacaractère (le traite comme un caractère littéral).
grep -E "erreur|avertissement" fichier.log # Rechercher des lignes contenant soit "erreur" soit "avertissement"
grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" fichier.txt # Ce motif est une expression régulière qui décrit une adresse IP version 4 (IPv4)
Avec sed
BRE (par défaut avec sed):
sed -n '/a\{2\}/p' fichier.txt # Affiche les lignes contenant "aa"
ERE (avec l’option -E ou -r):
sed -E -n '/a{2}/p' fichier.txt # Affiche les lignes contenant "aa"
Avec awk
ERE (par défaut avec awk):
awk '/a{2}/ {print}' fichier.txt # Affiche les lignes contenant "aa"
Cas particuliers et bonnes pratiques
Échappement : En BRE, les métacaractères ?, +, {, |, (, ) doivent être échappés avec \.
Portabilité : Les ERE sont plus lisibles et recommandées pour les scripts complexes.
Outils: grep -E, sed -E, et awk utilisent les ERE par défaut ou via des options.
Exemple complet
Besoin
BRE (grep/sed)
ERE (grep -E/sed -E)
Trouver « foo » ou « bar »
grep « foo\|bar »
grep -E « foo|bar » fichier.txt
Trouver 3 chiffres consécutifs
grep « [0-9]\{3\} »
grep -E « [0-9]{3} »
Trouver un mot optionnel
grep « colou\(r\)\? »
grep -E « colou(r)? »
Résumé
BRE : Nécessite l’échappement de nombreux métacaractères.
ERE : Syntaxe plus intuitive, proche des langages modernes (Python, Perl, etc.).
Exemples d’utilisation de * avec BRE et ERE
Voici des exemples concrets d’utilisation du métacaractère * avec les expressions régulières de base (BRE) et les expressions régulières étendues (ERE), notamment avec des outils comme grep -E, sed -E, et awk.
Exemples avec grep (par défaut en BRE)
Besoin
Commande BRE (avec grep)
Explication
Trouver les lignes contenant « ab* »
grep « abc\* » fichier.txt
Le \* signifie le caractère *.
Trouver les lignes contenant un « a » suivi de n’importe quel nombre de caractères
grep « a.* » fichier.txt
.* signifie « n’importe quel nombre de caractères après ‘a' ».
Trouver les lignes contenant « colou » suivi optionnellement de « r »
grep « colour\? » fichier.txt
\? signifie « 0 ou 1 occurrence de ‘r' ».
Exemples avec ERE (Extended Regular Expressions)
Besoin
Commande ERE (avec grep -E)
Explication
Trouver les lignes contenant « ab » suivi de 0 ou plusieurs « c »
grep -E « abc* » fichier.txt
c* signifie « 0 ou plusieurs ‘c' ».
Trouver les lignes contenant un « a » suivi de n’importe quel nombre de caractères
grep -E « a.* » fichier.txt
.* signifie « n’importe quel nombre de caractères après ‘a' ».
Trouver les lignes contenant « colou » suivi optionnellement de « r »