sed (stream editor) est un outil puissant de ligne de commande sous Linux pour manipuler du texte. Ce guide couvre toutes les techniques de recherche et remplacement avec de nombreux exemples pratiques.
Syntaxe de base
La commande s’utilise ainsi :
sed 's/pattern/replacement/' fichier
Où :
s= substitutionpattern= motif à rechercherreplacement= texte de remplacement
1. Substitution simple
1.1 Première occurrence par ligne
Remplace uniquement la première occurrence de chaque ligne :
sed 's/la/LA/' fichier.txt
Exemple :
Input: "la route la belle"
Output: "LA route la belle"
1.2 Toutes les occurrences (global)
Ajoutez le flag g pour remplacer toutes les occurrences de chaque ligne :
sed 's/la/LA/g' fichier.txt
Exemple :
Input: "la route la belle"
Output: "LA route LA belle"
1.3 Occurrence spécifique
Spécifiez le numéro de l’occurrence à remplacer :
sed 's/la/LA/2' fichier.txt # 2ème occurrence
sed 's/la/LA/3' fichier.txt # 3ème occurrence
Exemple :
Input: "la la la la"
Output: "la LA la la" (avec /2)
2. Substitution conditionnelle
2.1 Par motif de ligne
Utilisez /motif/ pour limiter la substitution aux lignes contenant le motif :
sed '/awk/ s/sed/SED/' fichier.txt
Remplace sed par SED uniquement sur les lignes contenant awk.
2.2 Par numéro de ligne
Ciblez une ligne spécifique par son numéro :
sed '18 s/sed/SED/' fichier.txt # Ligne 18
sed '5 s/old/new/' fichier.txt # Ligne 5
2.3 Par expression régulière
Utilisez une regex pour matcher les lignes :
sed '/^[ ][Ss]ed/ s/ed/ED/g' fichier.txt
Remplace ed par ED sur les lignes commençant par Sed ou sed.
3. Substitution sur intervalles (blocs)
3.1 Par motifs (début-fin)
Substituez entre deux motifs :
# Première occurrence
sed '/Début/,/Fin/ s/ed/ED/' fichier.txt
# Toutes les occurrences
sed '/Début/,/Fin/ s/ed/ED/g' fichier.txt
Exemple :
Début
texte ed à modifier
Fin
texte ed non modifié
3.2 Par intervalle de lignes
Substituez entre deux numéros de ligne :
sed '8,13 s/ed/ED/g' fichier.txt # Lignes 8 à 13
sed '10,$ s/old/new/g' fichier.txt # Ligne 10 à la fin
3.3 Combinaisons motif + ligne
Mélangez motifs et numéros de ligne :
sed '8,/Fin/ s/ed/ED/g' fichier.txt # Ligne 8 au motif Fin
sed '/Début/,13 s/ed/ED/g' fichier.txt # Motif Début à ligne 13
sed '/Début/,$ s/ed/ED/g' fichier.txt # Motif Début à la fin ($)
4. Substitutions avancées
4.1 Première occurrence globale (0,/regex/)
Le flag 0 permet de ne remplacer que la première occurrence globale du fichier :
sed '0,/sed/ s//SED/' fichier.txt
Attention : Contrairement à /sed/ seul, cela ne traite que la première occurrence dans tout le fichier.
4.2 Exclure les motifs de remplacement
Pour remplacer le contenu entre deux motifs sans toucher aux motifs eux-mêmes :
sed '/Début/,/Fin/{
/Début/b
/Fin/b
s/.*/SED - The Stream Editor/
}' fichier.txt
Explication :
/Début/b= branch (saute) si le motifDébutest trouvé/Fin/b= branch si le motifFinest trouvés/.*/.../= remplace la ligne entière par le texte spécifié
Exemple :
Début
ancien contenu
Fin
Devient :
Début
SED - The Stream Editor
Fin
4.3 Remplacement avec référence
Utilisez les captures pour référencer des parties du motif :
# Échanger deux mots
sed 's/\([^ ]*\) \([^ ]*\)/\2 \1/' fichier.txt
# Ajouter des parenthèses autour d'un motif
sed 's/\([0-9]\{3\}\)/(\1)/' fichier.txt
5. Options utiles
| Option | Description |
|---|---|
-i | Modifie le fichier en place (attention !) |
-i.bak | Modifie en place + crée une sauvegarde .bak |
-n | Supprime l’affichage par défaut (utilisé avec p) |
-E | Active les regex étendues (équivalent à egrep) |
-r | Idem que -E (version GNU) |
Exemples :
# Modifier en place avec sauvegarde
sed -i.bak 's/old/new/g' fichier.txt
# Avec regex étendue (moins d'échappement)
sed -E 's/[0-9]{3}/NUM/' fichier.txt
# Afficher uniquement les lignes modifiées
sed -n 's/old/new/pg' fichier.txt
6. Cas pratiques
6.1 Nettoyer des espaces
# Réduire les espaces multiples à une seule
sed 's/ */ /g' fichier.txt
# Supprimer les espaces de début de ligne
sed 's/^ *//' fichier.txt
# Supprimer les espaces de fin de ligne
sed 's/ *$//' fichier.txt
6.2 Manipuler des fichiers de configuration
# Remplacer une valeur dans un fichier de config
sed -i 's/^port=.*/port=8080/' config.conf
# Commenter une ligne
sed -i 's/^#?database.*/#database=localhost/' config.conf
6.3 Traitement de logs
# Masquer des adresses IP
sed 's/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/[IP]/g' logfile.log
# Extraire les dates
sed -n 's/.*\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\).*/\1/p' logfile.log
7. Différences entre sed et autres outils
| Outil | Type | Meilleur usage |
|---|---|---|
sed | Stream editor | Substitutions, transformations linéaires |
awk | Pattern scanning | Traitements complexes par colonnes |
perl | Language complet | Regex avancées, traitement multiline |
tr | Translate | Remplacement caractère par caractère |
8. Bonnes pratiques
- Testez toujours d’abord sans
-ipour voir le résultat - Sauvegardez vos fichiers importants avant modification
- Utilisez
-Epour des regex plus lisibles - Documentez vos commandes complexes avec des commentaires
- Privilégiez la simplicité - une commande simple est plus fiable
9. Ressources
man sed- Documentation officiellesed --help- Aide en ligne- Sed - An Introduction and Tutorial - Guide complet