Skip to content

Regex

Expressions Régulières (Regex)

Les expressions régulières (Regex) sont des séquences de caractères qui forment un modèle de recherche. Elles sont extrêmement puissantes pour la manipulation de texte, la recherche de motifs et le nettoyage de données.

Tip

Testez vos Regex en direct ! - Regex101 : Le meilleur outil pour tester, débugger et comprendre vos regex (supporte PCRE, Python, Go, etc.). - RegExr : Une alternative visuelle très pédagogique.

Syntaxe de base

Symbole Description Exemple
. N'importe quel caractère (sauf nouvelle ligne) a.c correspond à "abc", "a@c"
^ Début de ligne ^Bonjour
$ Fin de ligne fin$
* 0 ou plusieurs occurrences du précédent ab*c
+ 1 ou plusieurs occurrences du précédent ab+c
? 0 ou 1 occurrence du précédent colou?r
[] Classe de caractères (l'un des caractères) [aeiou] (voyelles)
[^] Négation de classe [^0-9] (non-chiffre)
| OU logique chat|chien
() Groupe de capture (ab)+
{n,m} Quantificateur (entre n et m fois) a{2,4}

Utilisation avec les outils CLI

Grep (Global Regular Expression Print)

grep est utilisé pour rechercher des lignes correspondant à un motif.

  • Recherche simple :

    grep "erreur" fichier.log
    

  • Expressions régulières étendues (-E) : Nécessaire pour utiliser |, +, ?, etc. sans échappement.

    # Trouve les lignes contenant "erreur" ou "warning"
    grep -E "erreur|warning" fichier.log
    
    # Trouve les lignes commençant par un chiffre
    grep -E "^[0-9]" fichier.txt
    

  • Compter les occurrences (-c) :

    grep -c "motif" fichier.txt
    

Sed (Stream Editor)

sed est principalement utilisé pour la transformation de texte (substitution).

  • Substitution simple (s/motif/remplacement/) :

    # Remplace la première occurrence de "chat" par "chien" sur chaque ligne
    sed 's/chat/chien/' fichier.txt
    

  • Substitution globale (g) :

    # Remplace toutes les occurrences
    sed 's/chat/chien/g' fichier.txt
    

  • Utilisation de groupes de capture (\1, \2) :

    # Format de date : transforme "2023-01-25" en "25/01/2023"
    # ([0-9]{4}) -> Groupe 1 (année)
    # ([0-9]{2}) -> Groupe 2 (mois)
    # ([0-9]{2}) -> Groupe 3 (jour)
    echo "2023-01-25" | sed -E 's/([0-9]{4})-([0-9]{2})-([0-9]{2})/\3\/\2\/\1/'
    

  • Supprimer des lignes vides :

    # ^$ correspond à une ligne vide
    sed '/^$/d' fichier.txt
    

Awk

awk est un langage de programmation complet orienté traitement de texte, qui utilise les regex pour filtrer les enregistrements.

  • Filtrer les lignes par motif :

    # Affiche toute la ligne si elle contient "connexion"
    awk '/connexion/ { print $0 }' fichier.log
    

  • Filtrer sur un champ spécifique :

    # Si le 3ème champ ($3) correspond à un chiffre
    awk '$3 ~ /^[0-9]+$/ { print $1, $3 }' data.txt
    

  • Négation (!~) :

    # Si le 2ème champ NE contient PAS "root"
    awk '$2 !~ /root/ { print $0 }' /etc/passwd