Linux — utilisation avancée et administration · Étape 21

Construis et teste des expressions rationnelles

Passe d’un besoin textuel à une regex vérifiable, distingue BRE et ERE, puis teste cas positifs et négatifs.

Durée indicative · ~1 h 30Niveau intermédiairePrérequis conseillé · Leçon 20 — environnement, connexion et arrêtPratique · TP
L’idée reçue

« Une regex compliquée est forcément plus précise. »

Une expression rationnelle utile traduit un format observable, reste lisible et possède des tests positifs et négatifs. La complexité non testée augmente le risque de faux positifs.

01Prépare les données

chmod +x module5-text-automation-lab.sh
./module5-text-automation-lab.sh setup
export LAB="/tmp/soria-linux-text-$USER"
./module5-text-automation-lab.sh status

02Commence par des ancres

grep -E '^2026-08-04T' "$LAB/data/access.log"
grep -E 'client=[0-9.]+$' "$LAB/data/access.log"
grep -Ev '^2026-08-04T.*client=[0-9.]+$' "$LAB/data/access.log"

^ ancre le début et $ la fin. La troisième commande révèle la ligne malformée au lieu de la masquer.

03Utilise les classes de caractères

grep -E 'status=[0-9]{3}' "$LAB/data/access.log"
grep -E 'status=(4|5)[0-9]{2}' "$LAB/data/access.log"
grep -E 'method=(GET|POST)' "$LAB/data/access.log"
Élément
Sens
Exemple
[0-9]
un chiffre
status=[0-9]
[^ ]
un caractère sauf espace
path=[^ ]+
+
une ou plusieurs occurrences
[0-9]+
3
exactement trois occurrences
[0-9]3
(a|b)
alternative ERE
(GET|POST)

04Distingue BRE et ERE

printf '%s
' GET POST PUT | grep 'GET\|POST'
printf '%s
' GET POST PUT | grep -E 'GET|POST'

Avec grep classique, l’alternative BRE nécessite souvent un échappement. Avec grep -E, les groupes, alternatives et quantificateurs étendus sont plus lisibles.

05Construis un validateur de ligne

pattern='^[0-9]{4}-[0-9]{2}-[0-9]{2}T[^ ]+ method=(GET|POST) path=[^ ]+ status=[0-9]{3} bytes=[0-9]+ duration_ms=[0-9]+ client=[0-9.]+$'

grep -En "$pattern" "$LAB/data/access.log"
grep -Env "$pattern" "$LAB/data/access.log"
Une ligne qui ne correspond pas n’est pas automatiquement invalide dans tous les contextes. Ici, le format est défini par le laboratoire, donc le test négatif est une preuve exploitable.

06Teste une regex sur un jeu minimal

printf '%s
' 'status=200' 'status=50' 'xstatus=500' 'status=404 extra' | grep -E '^status=[0-9]{3}$'

Le jeu contient un cas valide, une longueur incorrecte, un préfixe inattendu et un suffixe supplémentaire.

Challenge autonome

Détecte les événements SSH

Écris trois regex : authentification réussie, mot de passe refusé et adresse IPv4 source. Fournis pour chacune au moins un cas positif et un cas négatif tirés de auth.log.

Ce que tu retiens

Une regex est un contrat de format. Les ancres, classes et quantificateurs doivent être choisis à partir des données, puis prouvés sur des lignes qui doivent correspondre et d’autres qui doivent être rejetées.

Ta progression

Chargement de l’état… Se connecter pour synchroniser.