sed : chercher et remplacer en CLI
Mac / BSD sed
Sur macOS, sed est la version BSD. Installer gnu-sed via Homebrew : brew install gnu-sed — puis utiliser gsed ou ajuster le PATH.
sed (Stream EDitor) lit un flux ligne par ligne et applique des expressions. Sa syntaxe de base :
Options essentielles
| Option | Rôle |
|---|---|
-i | Édition en place (modifie le fichier) |
-i.bak | Édition en place avec backup .bak |
-n | Supprime l'affichage automatique (print explicite avec p) |
-e | Permet plusieurs expressions |
-E | Active les regex étendues (ERE) |
Substitution
La commande s est la plus utilisée :
Flags de substitution
| Flag | Effet |
|---|---|
g | Remplace toutes les occurrences (global) |
N (chiffre) | Remplace la N-ième occurrence |
I | Insensible à la casse |
p | Affiche la ligne si substitution effectuée |
# Première occurrence uniquement
sed 's/foo/bar/' file
# Toutes les occurrences
sed 's/foo/bar/g' file
# 2ème occurrence uniquement
sed 's/foo/bar/2' file
# Insensible à la casse
sed 's/foo/bar/gI' file
# Édition en place
sed -i 's/old/new/g' file
# Avec backup
sed -i.bak 's/old/new/g' file
Délimiteur alternatif
Utile quand le pattern contient des / (chemins, URLs) :
Groupes de capture
# Inverser prénom et nom (ex: "John Doe" → "Doe, John")
sed -E 's/([A-Z][a-z]+) ([A-Z][a-z]+)/\2, \1/' file
# Encapsuler un mot entre crochets
sed -E 's/(error)/[\1]/gI' file
Adresses
Sed peut cibler des lignes spécifiques avant d'appliquer une expression.
# Ligne 3 uniquement
sed '3s/foo/bar/' file
# Lignes 3 à 7
sed '3,7s/foo/bar/' file
# Dernière ligne
sed '$s/foo/bar/' file
# Ligne contenant un pattern
sed '/pattern/s/foo/bar/' file
# De la ligne contenant "start" jusqu'à "end"
sed '/start/,/end/s/foo/bar/' file
# Toutes les lignes sauf la 1ère
sed '1!s/foo/bar/' file
Suppression de lignes
# Supprimer la ligne 5
sed '5d' file
# Supprimer les lignes vides
sed '/^$/d' file
# Supprimer les lignes contenant un pattern
sed '/pattern/d' file
# Supprimer les commentaires (lignes commençant par #)
sed '/^#/d' file
# Supprimer les lignes vides ET les commentaires
sed -e '/^$/d' -e '/^#/d' file
# Supprimer de la ligne 3 à la fin
sed '3,$d' file
Affichage ciblé
Avec -n, sed n'affiche rien par défaut — p affiche explicitement :
# Afficher uniquement la ligne 5
sed -n '5p' file
# Afficher les lignes 3 à 7
sed -n '3,7p' file
# Afficher les lignes contenant un pattern (comme grep)
sed -n '/error/p' file
# Afficher les lignes entre deux patterns
sed -n '/start/,/end/p' file
Insertion, ajout, remplacement de lignes
# Insérer une ligne AVANT la ligne 3
sed '3i\nouvelle ligne' file
# Ajouter une ligne APRÈS la ligne 3
sed '3a\nouvelle ligne' file
# Remplacer entièrement la ligne 3
sed '3c\ligne de remplacement' file
# Ajouter une ligne après chaque ligne contenant "pattern"
sed '/pattern/a\ligne ajoutée' file
Cas pratiques
Supprimer les espaces en début/fin de ligne
Supprimer les lignes dupliquées consécutives
Afficher uniquement les N premières lignes
Numéroter les lignes non vides
Remplacer dans plusieurs fichiers
Extraire une valeur de config
Commenter une ligne contenant un pattern
Décommenter une ligne
Ajouter un préfixe à chaque ligne
Supprimer les séquences ANSI (couleurs terminal)
Voir aussi
- Remplacer les commandes de base — alternatives Rust pour la recherche et le traitement de texte