Aller au contenu

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 ou cut,
  • é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 :

Terminal window
sed 's/localhost/127.0.0.1/g' fichier.conf

Pour supprimer les lignes vides d’un fichier :

Terminal window
sed '/^$/d' fichier.txt

Et pour insérer une ligne au début de chaque fichier texte :

Terminal window
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

Terminal window
sed [options] 'commande' [fichier]
  • commande : une ou plusieurs instructions à appliquer (par exemple s pour substitution, d pour suppression…)
  • [fichier] : fichier cible (facultatif, sinon sed 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) :

Terminal window
sed '' fichier.txt

Exemple avec substitution

Remplacer le mot production par développement :

Terminal window
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 :
Terminal window
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 #) :

Terminal window
sed 's#/var/www#/srv/http#g' fichier.conf

Lecture depuis l’entrée standard

sed peut être utilisé dans un pipeline :

Terminal window
cat fichier.txt | sed 's/erreur/avertissement/g'

Ou directement :

Terminal window
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

Terminal window
sed 's/ancien/nouveau/' fichier.txt
  • s : commande de substitution
  • ancien : 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 :

Terminal window
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 :

Terminal window
sed 's#/home/user#/mnt/partage#g' fichier.txt

Exemple avec variable dans un script

Dans un script shell, on peut passer des variables :

Terminal window
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) :

Terminal window
sed -i 's/DEBUG/INFO/g' fichier.log

Et pour faire une copie de sauvegarde avant modification :

Terminal window
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 :

Terminal window
sed '3d' fichier.txt

Supprimer plusieurs lignes précises (ex : lignes 2, 4 et 6) :

Terminal window
sed '2d;4d;6d' fichier.txt

Supprimer les lignes vides

Terminal window
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” :

Terminal window
sed '/erreur/d' fichier.log

Supprimer les lignes qui ne contiennent pas un motif

Terminal window
sed '/erreur/!d' fichier.log
  • ! inverse la condition.

Supprimer une plage de lignes

Supprimer de la ligne 10 à la 20 :

Terminal window
sed '10,20d' fichier.txt

Supprimer entre deux motifs :

Terminal window
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 :

Terminal window
sed '1i\# Entête ajoutée automatiquement' fichier.txt

Insérer du texte avant chaque ligne contenant un mot précis :

Terminal window
sed '/<titre>/i\# Section suivante :' fichier.txt

Ajout après une ligne avec a

Ajouter une ligne après la ligne 3 :

Terminal window
sed '3a\Texte ajouté après la ligne 3' fichier.txt

Ajouter après chaque ligne contenant un motif :

Terminal window
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 \ :

Terminal window
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” :

Terminal window
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 :

Terminal window
sed '5c\Cette ligne a été remplacée' fichier.txt

Remplacer une ligne contenant un motif

Remplacer toutes les lignes contenant Erreur fatale :

Terminal window
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 :

Terminal window
sed '10,12c\Bloc remplacé par cette ligne unique' fichier.txt

Remplacer entre deux motifs

Terminal window
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 :

Terminal window
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

ExpressionSignification
.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, \2Référence à un groupe capturé

Exemples pratiques

Supprimer les lignes vides ou contenant uniquement des espaces :

Terminal window
sed '/^[[:space:]]*$/d' fichier.txt

Remplacer un mot au début de ligne uniquement :

Terminal window
sed 's/^Erreur/Attention/' fichier.log

Remplacer un mot à la fin d’une ligne :

Terminal window
sed 's/timeout$/délai dépassé/' fichier.txt

Ajouter une virgule après chaque chiffre :

Terminal window
sed 's/[0-9]/&,/g' fichier.txt

Remplacer un format “Nom:Valeur” par “Valeur (Nom)” :

Terminal window
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

Terminal window
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 :

Terminal window
sed -i.bak 's/root/admin/g' fichier.txt
  • Le fichier fichier.txt.bak est créé automatiquement.

Édition en place sur plusieurs fichiers

Terminal window
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 :

Terminal window
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
/^#/d
s/^Nom:/Utilisateur:/g

Exécuter le script sur un fichier

Terminal window
sed -f modifs.sed fichier.txt
  • -f : indique à sed d’utiliser un fichier de commandes.

Appliquer les modifications directement dans le fichier (-i)

Terminal window
sed -i -f modifs.sed fichier.txt

Exemple de script plus avancé

1i\# Ce fichier a été modifié automatiquement
s/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 concretssed devient un outil indispensable.

1. Nettoyage de fichiers journaux

Supprimer les lignes contenant “DEBUG” :

Terminal window
sed '/DEBUG/d' application.log

Masquer les adresses IP :

Terminal window
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 :

Terminal window
sed -i 's/^Listen 80/Listen 8080/' /etc/apache2/ports.conf

Ajouter une ligne de commentaire en haut d’un fichier :

Terminal window
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 :

Terminal window
sed -i 's/http:/https:/g' site.html

Changer un chemin dans un script :

Terminal window
sed -i 's#/var/www#/srv/web#g' script.sh

4. Nettoyage de données dans des CSV

Supprimer les colonnes inutiles :

Terminal window
sed 's/;[^;]*$//' fichier.csv

Changer le séparateur ; en , :

Terminal window
sed 's/;/,/g' fichier.csv

5. Traitement en pipeline

Combiner grep et sed :

Terminal window
grep "ERREUR" log.txt | sed 's/ERREUR/[ALERTE]/'

Ou injecter du texte dans un template :

Terminal window
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 concretssed permet de gagner un temps précieux au quotidien.