Cours Expressions rationnelles en PDF (Intermédiaire)
Les expressions rationnelles (Regex) : ce qu'il faut savoir. Une expression rationnelle (regular expression) est une suite de caractères décrivant des ensembles de caractères pour la recherche et le remplacement de texte. En administration système UNIX, elles servent à filtrer, transformer et valider des flux textuels avec des outils comme grep, sed ou awk. Le document fournit une synthèse pratique et des exemples exploitables en ligne de commande, rédigée avec attention sur la portabilité et la rigueur méthodologique, et testée sur distributions Linux courantes pour garantir reproductibilité.
Regex vs Mathématiques : Clarification
Attention : ce cours traite des expressions régulières (Regex) pour l'informatique et non des expressions rationnelles mathématiques. La confusion est fréquente dans les recherches ; l'objectif est strictement pratique : fournir un tutoriel regex linux centré sur la syntaxe des expressions régulières, l'usage de grep, sed et awk, et les conversions entre moteurs. Cette précision recentre le contenu sur l'administration système et les pipelines texte.
Pourquoi utiliser les Regex sous Linux ?
Les expressions régulières sont indispensables pour automatiser le traitement de texte sur les systèmes UNIX : extraction de champs dans des logs, validation d'entrées, nettoyage de fichiers et intégration dans des scripts d'administration. Les outils standard (grep, sed, awk) embarquent des moteurs variés ; maîtriser leur syntaxe améliore la portabilité, l'efficacité des pipelines et la maintenabilité des scripts en production.
🎯 Ce que vous apprendrez
- Quantificateurs (?, *, +, {n,m}) — sémantique et effets sur les moteurs (greedy vs minimal). Adapter la syntaxe selon BRE/ERE (ex.
\{n\}en BRE). - Métacaractères (., |, [], (), ^, $) — classes de caractères, ancrages et groupements pour construire des motifs robustes.
- Classes POSIX — utilisation de
[[:digit:]],[[:alpha:]],[[:alnum:]]pour garantir portabilité. - Différences BRE / ERE / PCRE — constructions nécessitant des échappements et options utiles (
-E,-r,-P). - Pratique : grep et sed — motifs appliqués à des fichiers réels et traduction entre moteurs. Exemple :
grep -E '^[0-9]{5}$' fichier.txt
Exemples pratiques de regex sous Linux
Mini-tutoriel illustrant des cas courants : filtres pour logs, extraction de champs et préparation de données avant traitement par des scripts shell. Les exemples supposent UTF-8 ; vérifiez votre locale pour des jeux de caractères étendus. Les commandes ont été testées avec grep, sed et awk pour faciliter l'intégration dans des pipelines et garantir portabilité entre distributions.
Cas d'usage réels des expressions régulières
Cas concrets : filtrer des lignes d'erreur contenant des codes spécifiques, extraire des adresses IP ou des timestamps depuis des journaux, valider des formats d'identifiants, normaliser des CSV avant import. On combine classes POSIX, assertions et ancrages pour des motifs lisibles tout en limitant l'impact sur la performance lors du traitement de grands fichiers.
Tableau récapitulatif des métacaractères
Tableau synthétique pour une consultation rapide des métacaractères les plus courants, leur rôle et un exemple d'utilisation en contexte shell. Ce repère facilite la conversion de motifs entre moteurs et l'écriture de scripts reproductibles.
| Métacaractère | Fonction | Exemple |
|---|---|---|
| . | Correspond à n'importe quel caractère (sauf newline selon le moteur) | grep 'er.' fichier → « era », « er1 » |
| ^ | Ancre début de ligne | grep '^INFO' |
| $ | Ancre fin de ligne | grep '\.log$' |
| [] | Classe de caractères | grep '^[0-9]' |
| () | Groupement (capturant en ERE/PCRE) | sed -E 's/(ab)+/X/g' |
| | | Alternation | grep -E 'error|warning' |
| ? | 0 ou 1 occurrence (quantificateur) | grep -E 'colou?r' |
| * | 0 ou plusieurs occurrences (greedy) | grep 'ab*c' |
Tableau de référence rapide des opérateurs
Référence concise des opérateurs et constructions fréquentes pour un usage quotidien dans un tutoriel regex linux. Utile comme mémo pour adapter des motifs selon la syntaxe grep sed awk et pour écrire des scripts clairs et portables.
[abc]— classe de caractères : correspond à l'un des caractères listés.[a-z]— intervalle : plage de caractères (attention à l'ordre et au set locale).[[:digit:]]— classe POSIX pour chiffres (équivalent à[0-9]en ASCII).^,$— ancrages début/fin de ligne.\— caractère d'échappement : neutralise le sens métacaractère.{n,m}— quantificateur borné : au moins n et au plus m occurrences (attention aux échappements en BRE).\b— bord de mot (disponible en PCRE, comportement variable en POSIX).(?: ... )— groupement non capturant (PCRE/ERE selon moteur).
Exercices d'application
Trois exercices pratiques avec solutions détaillées pour s'entraîner aux motifs et à leur adaptation entre moteurs. Ces exercices visent la mise en œuvre immédiate dans des pipelines shell et conviennent pour des séances d'autoévaluation ou de formation continue.
Exercice 1 — Valider un code postal (5 chiffres)
Problème : écrire une commande pour filtrer les lignes contenant uniquement un code postal composé de cinq chiffres.
Solution : utiliser grep -E '^[0-9]{5}$' fichier.txt. En BRE avec grep sans -E, échapper les accolades : grep '^[0-9]\{5\}$' fichier.txt.
Exercice 2 — Extraire des adresses IP v4
Problème : isoler les adresses IPv4 présentes dans un journal.
Solution : motif simple et suffisamment restrictif pour la plupart des logs :
grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' journal.log
Pour réduire les faux positifs, restreindre chaque octet à 0-255 avec une expression plus longue ou traiter via awk pour valider numériquement les octets.
Exercice 3 — Valider une adresse email basique
Problème : valider une adresse email simple (format local@domain.tld) dans un fichier.
Solution : motif pratique mais non exhaustif :
grep -E '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$' fichier.txt
Expliquer limites : ce motif ne couvre pas toutes les règles RFC mais convient pour un filtrage initial avant validation plus stricte.
FAQ condensée
Comment distinguer rapidement BRE et ERE dans un script utilisant grep ou sed ?
En BRE, les métacaractères (){}?+ sont littéraux et doivent être échappés (ex. \{3\}), alors qu'en ERE ils sont interprétés sans backslash. Utiliser grep -E ou sed -r pour ERE et grep -P pour PCRE si disponible. La règle d'échappement guide la conversion d'un motif entre ces moteurs.
Quand privilégier les classes POSIX comme [[:digit:]] ?
Les classes POSIX assurent portabilité et lisibilité et évitent des erreurs avec des jeux de caractères étendus. Utilisez-les lorsque le moteur est POSIX-aware ou pour garantir compatibilité entre grep et sed sur différentes distributions.
Pourquoi choisir ce cours ?
Rédigé par Thierry Vaira, le document privilégie une approche pratique centrée sur l'environnement UNIX : terminologie claire, exemples de commandes réelles et comparaison explicite entre BRE, ERE et PCRE. La mise en regard des syntaxes avec règles d'échappement et des illustrations applicables permet une appropriation rapide pour l'automatisation et la maintenance de scripts shell, en se focalisant sur la portabilité et la rigueur méthodologique. Contenu utile pour toute personne cherchant un tutoriel regex linux incluant des exercices expressions rationnelles et une syntaxe grep sed awk de référence.
👤 Public cible et prérequis
- Public : administrateurs système, ingénieurs et développeurs manipulant des logs ou des flux textuels sous Linux.
- Prérequis : maîtrise de la ligne de commande (bash), connaissance basique des outils texte et compréhension élémentaire des chaînes de caractères. Pour approfondir vos compétences, consultez notre maîtrise des commandes ou notre référence Debian.