Maitriser sed
Mise à jour :
Quand on doit modifier rapidement le contenu de plusieurs fichiers, effectuer
des remplacements massifs ou supprimer certaines lignes en fonction d’un motif,
la commande sed
est un outil incontournable. Conçue pour l’édition de flux,
sed
permet de rechercher, remplacer, supprimer ou insérer du texte directement
en ligne de commande, sans ouvrir les fichiers manuellement. Elle est
particulièrement utile pour automatiser des traitements dans des fichiers de
configuration, des logs, ou des exports texte. Maîtriser sed
, c’est gagner en
précision et en rapidité pour manipuler du contenu à grande échelle.
Introduction à sed
sed
signifie stream editor : c’est un éditeur de texte non interactif,
conçu pour modifier du contenu ligne par ligne, en le traitant comme un
flux. Contrairement à un éditeur classique, sed
ne charge pas tout le fichier
en mémoire — il lit, transforme, puis affiche ou réécrit le contenu ligne après
ligne.
Cette commande est particulièrement utile pour :
- automatiser des modifications de texte dans des scripts,
- faire des remplacements massifs sur des fichiers de configuration ou de logs,
- nettoyer ou filtrer du contenu avant de le traiter avec
awk
,grep
oucut
, - éditer un grand nombre de fichiers en une seule ligne.
Par exemple, pour remplacer tous les mots localhost
par 127.0.0.1
dans un
fichier :
sed 's/localhost/127.0.0.1/g' fichier.conf
Pour supprimer les lignes vides d’un fichier :
sed '/^$/d' fichier.txt
Et pour insérer une ligne au début de chaque fichier texte :
sed '1i\# Fichier modifié automatiquement' fichier.txt
sed
excelle lorsqu’il s’agit de modifications répétitives, simples ou
complexes, sur de nombreux fichiers ou dans des scripts d’automatisation.
Syntaxe de base
La commande sed
suit une structure simple mais très puissante, qui repose sur
l’application de commandes d’édition à un flux de texte. Elle peut être
utilisée directement en ligne de commande ou dans des scripts.
Structure générale
sed [options] 'commande' [fichier]
commande
: une ou plusieurs instructions à appliquer (par exemples
pour substitution,d
pour suppression…)[fichier]
: fichier cible (facultatif, sinonsed
lit depuis l’entrée standard)[options]
: comme-i
pour éditer en place
Exemple minimal
Afficher les lignes du fichier avec sed
(comme un cat
) :
sed '' fichier.txt
Exemple avec substitution
Remplacer le mot production
par développement
:
sed 's/production/développement/' fichier.txt
- Remplace seulement la première occurrence par ligne.
- Pour remplacer toutes les occurrences dans chaque ligne, on ajoute le
modificateur
g
:
sed 's/production/développement/g' fichier.txt
Utiliser un autre séparateur que /
Quand les motifs contiennent des /
, on peut utiliser un autre caractère (comme
#
) :
sed 's#/var/www#/srv/http#g' fichier.conf
Lecture depuis l’entrée standard
sed
peut être utilisé dans un pipeline :
cat fichier.txt | sed 's/erreur/avertissement/g'
Ou directement :
grep "ERROR" journal.log | sed 's/ERROR/ALERTE/'
Avec cette syntaxe de base, sed
devient immédiatement un outil rapide de
modification en ligne de commande, sans ouvrir le moindre fichier. Les
chapitres suivants explorent ses commandes d’édition principales :
substitution, suppression, insertion et bien plus encore.
Substitution de texte
La commande la plus utilisée avec sed
est la substitution (s
). Elle
permet de rechercher un motif et de le remplacer par un autre. C’est l’outil
idéal pour effectuer des remplacements massifs dans un fichier, sans ouvrir
d’éditeur.
Syntaxe de la substitution
sed 's/ancien/nouveau/' fichier.txt
s
: commande de substitutionancien
: motif à rechercher (expression régulière)nouveau
: texte de remplacement- Par défaut, seule la première occurrence par ligne est remplacée.
Remplacer toutes les occurrences avec g
Pour remplacer toutes les occurrences dans chaque ligne :
sed 's/erreur/avertissement/g' fichier.log
Remplacer à partir d’une position spécifique
-
2e occurrence uniquement dans chaque ligne :
Terminal window sed 's/localhost/127.0.0.1/2' fichier.conf
Utiliser un autre délimiteur
Si votre motif contient des /
, utilisez un autre caractère (comme #
, @
, ou
:
) pour simplifier la syntaxe :
sed 's#/home/user#/mnt/partage#g' fichier.txt
Exemple avec variable dans un script
Dans un script shell, on peut passer des variables :
NOM="toto"sed "s/utilisateur/$NOM/" fichier.txt
Remplacer en modifiant le fichier (-i
)
Pour appliquer le remplacement directement dans le fichier (édition en place) :
sed -i 's/DEBUG/INFO/g' fichier.log
Et pour faire une copie de sauvegarde avant modification :
sed -i.bak 's/DEBUG/INFO/g' fichier.log
La substitution avec sed
est extrêmement puissante : elle permet de
nettoyer, reformater, ou adapter rapidement du contenu, et s’intègre
parfaitement dans des scripts d’automatisation ou des traitements de masse.
Suppression de lignes
La commande d
de sed
permet de supprimer des lignes selon différents
critères : par numéro, par motif, ou via des plages de lignes. C’est l’un des
moyens les plus rapides pour nettoyer un fichier ou filtrer du contenu non
souhaité.
Supprimer une ligne spécifique
Supprimer la 3ᵉ ligne d’un fichier :
sed '3d' fichier.txt
Supprimer plusieurs lignes précises (ex : lignes 2, 4 et 6) :
sed '2d;4d;6d' fichier.txt
Supprimer les lignes vides
sed '/^$/d' fichier.txt
- Le motif
^$
désigne une ligne vide (rien entre début et fin de ligne).
Supprimer les lignes contenant un motif
Supprimer toutes les lignes contenant “erreur” :
sed '/erreur/d' fichier.log
Supprimer les lignes qui ne contiennent pas un motif
sed '/erreur/!d' fichier.log
!
inverse la condition.
Supprimer une plage de lignes
Supprimer de la ligne 10 à la 20 :
sed '10,20d' fichier.txt
Supprimer entre deux motifs :
sed '/<début>/,/<fin>/d' fichier.txt
- Supprime toutes les lignes entre
<début>
et<fin>
, inclusivement.
Grâce à la commande d
, sed
devient un outil de filtrage puissant, aussi
bien pour supprimer du bruit dans les fichiers logs que pour épurer un fichier
CSV ou nettoyer des scripts générés automatiquement.
Insertion et ajout de texte
Avec sed
, il est possible d’insérer ou ajouter du texte à une ou plusieurs
lignes spécifiques d’un fichier, sans avoir besoin d’un éditeur interactif. On
utilise pour cela les commandes i
(insert) et a
(append).
Insertion avant une ligne avec i
Insérer une ligne avant la 1ère ligne :
sed '1i\# Entête ajoutée automatiquement' fichier.txt
Insérer du texte avant chaque ligne contenant un mot précis :
sed '/<titre>/i\# Section suivante :' fichier.txt
Ajout après une ligne avec a
Ajouter une ligne après la ligne 3 :
sed '3a\Texte ajouté après la ligne 3' fichier.txt
Ajouter après chaque ligne contenant un motif :
sed '/erreur/a\Veuillez vérifier ce problème.' fichier.log
Ajouter plusieurs lignes
Pour insérer ou ajouter plusieurs lignes, chaque ligne doit commencer par un
backslash \
:
sed '2i\Ligne 1 insérée\Ligne 2 insérée' fichier.txt
Exemple d’ajout conditionnel
Ajouter un commentaire après chaque ligne contenant “root” :
sed '/root/a\# utilisateur système' /etc/passwd
Les commandes i
et a
sont très pratiques pour enrichir dynamiquement un
fichier, ajouter des en-têtes, insérer des avertissements, ou préparer un
formatage automatique — sans ouvrir le fichier manuellement.
Modification de lignes spécifiques
La commande c
de sed
permet de remplacer entièrement une ou plusieurs
lignes par une nouvelle ligne de texte. Elle est utile lorsque vous voulez
remplacer le contenu d’une ligne entière et non seulement un mot ou une
portion.
Remplacer une ligne par son numéro
Remplacer la ligne 5 par un message fixe :
sed '5c\Cette ligne a été remplacée' fichier.txt
Remplacer une ligne contenant un motif
Remplacer toutes les lignes contenant Erreur fatale
:
sed '/Erreur fatale/c\Une erreur a été détectée' fichier.log
Remplacer un bloc de lignes (plage)
Remplacer les lignes 10 à 12 par une seule ligne :
sed '10,12c\Bloc remplacé par cette ligne unique' fichier.txt
Remplacer entre deux motifs
sed '/<debut>/,/<fin>/c\Bloc remplacé ici' fichier.txt
Cette commande remplace l’ensemble du bloc (de <debut>
à <fin>
) par une
seule ligne.
Exemple concret : adapter une configuration
Remplacer une directive dans un fichier de configuration :
sed '/^Listen/c\Listen 8080' /etc/apache2/ports.conf
La commande c
est idéale pour les cas où il est plus simple de recréer la
ligne entière plutôt que de modifier une partie seulement. Elle est très utile
dans les fichiers de configuration, les scripts, ou pour générer des
fichiers de travail depuis des modèles.
Utilisation des expressions régulières
La force de sed
repose en grande partie sur sa capacité à utiliser des
expressions régulières (regex), ce qui permet d’effectuer des modifications
puissantes et précises sur des motifs complexes.
Caractères spéciaux utiles
Expression | Signification |
---|---|
. | N’importe quel caractère sauf saut de ligne |
^ | Début de ligne |
$ | Fin de ligne |
* | Répétition (zéro ou plusieurs fois) |
[] | Classe de caractères |
| | OU logique (dans certaines versions) |
\( \) | Groupes (pour capture) |
\1 , \2 | Référence à un groupe capturé |
Exemples pratiques
Supprimer les lignes vides ou contenant uniquement des espaces :
sed '/^[[:space:]]*$/d' fichier.txt
Remplacer un mot au début de ligne uniquement :
sed 's/^Erreur/Attention/' fichier.log
Remplacer un mot à la fin d’une ligne :
sed 's/timeout$/délai dépassé/' fichier.txt
Ajouter une virgule après chaque chiffre :
sed 's/[0-9]/&,/g' fichier.txt
Remplacer un format “Nom:Valeur” par “Valeur (Nom)” :
sed 's/\(.*\):\(.*\)/\2 (\1)/' fichier.txt
Ici,
\1
correspond au premier groupe(.*)
et\2
au second.
Sensibilité à la version
Certaines syntaxes plus complexes (comme \|
pour “ou”) ne sont pas compatibles
avec toutes les versions de sed
. En cas de doute, préférez les constructions
alternatives ou utilisez grep -E
pour tester vos regex.
Avec les expressions régulières, sed
devient un puissant moteur de
transformation de texte capable de réécrire, reformater ou nettoyer du contenu
avec une précision redoutable. Un incontournable dans tout pipeline de
traitement de texte.
Édition en place avec -i
Par défaut, sed
affiche les résultats de ses modifications dans le terminal
(stdout), sans toucher au fichier original. Pour appliquer les modifications
directement dans le fichier, on utilise l’option -i
(in-place).
Modifier un fichier directement
sed -i 's/localhost/127.0.0.1/g' fichier.conf
Cette commande remplace toutes les occurrences de localhost
par 127.0.0.1
dans le fichier sans créer de copie.
Créer une copie de sauvegarde avant modification
Pour garder une version originale du fichier avant modification :
sed -i.bak 's/root/admin/g' fichier.txt
- Le fichier
fichier.txt.bak
est créé automatiquement.
Édition en place sur plusieurs fichiers
sed -i 's/apache/nginx/g' *.conf
Cela applique le remplacement dans tous les fichiers .conf
du répertoire
courant.
Précautions d’usage
-
Toujours tester sans
-i
d’abord pour s’assurer du résultat :Terminal window sed 's/test/remplacement/' fichier.txt -
Utiliser
-i.bak
dans les scripts critiques permet de revenir facilement en arrière.
Compatibilité
Sur certains systèmes comme macOS, l’usage de -i
nécessite un argument
explicite, même vide :
sed -i '' 's/old/new/g' fichier.txt
L’option -i
rend sed
idéal pour automatiser des modifications de masse
dans des fichiers de configuration, des scripts ou des lots de documents, sans
manipulation manuelle. C’est une fonctionnalité incontournable pour les
traitements en production.
Utilisation de fichiers de script
Quand les modifications deviennent nombreuses ou répétitives, il est préférable
de les regrouper dans un fichier de commandes sed
. Cela rend les
opérations plus lisibles, réutilisables et faciles à maintenir.
Créer un fichier de script sed
Un fichier de script sed
contient une ou plusieurs instructions ligne par
ligne. Exemple modifs.sed
:
s/localhost/127.0.0.1/g/^#/ds/^Nom:/Utilisateur:/g
Exécuter le script sur un fichier
sed -f modifs.sed fichier.txt
-f
: indique àsed
d’utiliser un fichier de commandes.
Appliquer les modifications directement dans le fichier (-i
)
sed -i -f modifs.sed fichier.txt
Exemple de script plus avancé
1i\# Ce fichier a été modifié automatiquements/ancien/mis_a_jour/g/obsolète/d$ a\# Fin du fichier
Avantages
- Réutilisable : idéal pour des traitements récurrents
- Lisible : plus clair que plusieurs
-e
en ligne de commande - Intégrable : facile à inclure dans un script shell ou une tâche cron
Les fichiers de script sed
sont parfaits pour automatiser des
transformations complexes, surtout quand on doit modifier plusieurs fichiers
de manière cohérente ou itérative. Un bon réflexe pour tout administrateur ou
développeur.
Cas d’utilisation pratiques
sed
est largement utilisé dans les scripts, pipelines et automatisations pour
manipuler du texte de façon efficace. Voici quelques cas concrets où sed
devient un outil indispensable.
1. Nettoyage de fichiers journaux
Supprimer les lignes contenant “DEBUG” :
sed '/DEBUG/d' application.log
Masquer les adresses IP :
sed -E 's/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/[IP MASQUÉE]/g' serveur.log
2. Modification de fichiers de configuration
Changer le port Apache dans ports.conf
:
sed -i 's/^Listen 80/Listen 8080/' /etc/apache2/ports.conf
Ajouter une ligne de commentaire en haut d’un fichier :
sed -i '1i\# Fichier généré automatiquement' config.ini
3. Mise à jour de scripts ou fichiers HTML
Remplacer tous les liens http
par https
:
sed -i 's/http:/https:/g' site.html
Changer un chemin dans un script :
sed -i 's#/var/www#/srv/web#g' script.sh
4. Nettoyage de données dans des CSV
Supprimer les colonnes inutiles :
sed 's/;[^;]*$//' fichier.csv
Changer le séparateur ;
en ,
:
sed 's/;/,/g' fichier.csv
5. Traitement en pipeline
Combiner grep
et sed
:
grep "ERREUR" log.txt | sed 's/ERREUR/[ALERTE]/'
Ou injecter du texte dans un template :
sed "s/{{VERSION}}/1.2.3/" template.txt > versionnée.txt
Ces cas illustrent la polyvalence de sed
pour automatiser des corrections,
formater des fichiers, ou préparer des données. Son intégration dans des
scripts le rend incontournable dans les tâches récurrentes d’administration ou
de déploiement.
Conclusion
Quand on doit automatiser des corrections dans des fichiers de logs, configurer
un service à distance, adapter un fichier HTML ou nettoyer des données CSV, la
commande sed
s’impose comme une solution rapide et efficace. Grâce à sa
capacité à modifier du texte en flux, elle permet de réaliser en une seule
ligne ce qui prendrait plusieurs manipulations manuelles. Voici quelques cas
d’usage concrets où sed
permet de gagner un temps précieux au quotidien.