Aller au contenu

Manipulez vos textes avec 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.

Exercices pratiques : mettre en application vos connaissances

Vous avez maintenant une bonne compréhension de la commande sed et de ses fonctionnalités. Pour aller plus loin, il est essentiel de pratiquer et de mettre en application vos connaissances. La meilleure façon d’apprendre est d’expérimenter par vous-même, de tester différentes commandes et de découvrir les subtilités de sed.

Pour cela, je vous propose de réaliser une série d’exercices pratiques. Je vous invite à vous rendre sur le dépôt GitHub suivant, où vous trouverez une série de d’excercies spécialement conçus pour vous aider à maîtriser la commande sed et à vous familiariser avec ses différentes options et fonctionnalités.

👉 Travaux pratiques : TP 04 : Manipuler des fichiers texte avec awk

Ces exercices couvrent notamment :

  • Extraction de colonnes
  • Filtrage de données
  • Manipulation de variables intégrées
  • Formatage des résultats
  • Traitement de plusieurs fichiers
  • Création de scripts awk

Ensuite vous serez invitée à réaliser un challenge pour mettre en pratique vos compétences nouvellement acquises. Ce challenge vous permettra de tester vos connaissances et de vous familiariser avec l’utilisation de sed dans des situations réelles.

Pourquoi pratiquer ?

L’apprentissage des commandes Linux repose sur la répétition et l’expérimentation. En travaillant sur ces TP :

  • Vous gagnez en confiance avec la ligne de commande
  • Vous découvrez des cas d’usage concrets
  • Vous développez des réflexes indispensables en environnement professionnel

Clonez le dépôt ou suivez directement les consignes en ligne, puis lancez-vous !

Contrôle de connaissances

Pourquoi ce contrôle ?

Cet contrôle va vous permettre de valider vos connaissances sur le sujet abordé dans le guide. Il comporte des QCM, des questions vrai/faux et des réponses ouvertes à un mot.

🕒 Le chronomètre commence dès que vous cliquez sur Démarrer le test. Vous devrez terminer l’examen avant la fin du temps imparti.

🎯 Pour réussir, vous devez obtenir au moins 80% de bonnes réponses.

💡 Je ne fournis pas directement les réponses aux questions. Cependant, si certaines sont complexes, des pistes d’explication pourront être proposées dans le guide ou après l’examen.

Bonne chance ! 🚀

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.

FAQ - Questions Fréquemment Posées

Qu'est-ce que la commande sed sous Linux ?
La commande sed est un éditeur de flux (stream editor) qui permet de rechercher, remplacer, supprimer ou insérer du texte directement en ligne de commande, sans ouvrir le fichier manuellement.
À quoi sert sed concrètement ?
Sed est utilisé pour modifier rapidement le contenu de fichiers texte : remplacer des mots, supprimer des lignes spécifiques, insérer ou ajouter du texte, et automatiser des traitements massifs dans des fichiers de configuration, des logs ou des exports texte.
Quelle est la syntaxe de base de sed ?
La syntaxe de base est : sed [options] 'commande' [fichier], où la commande peut être par exemple s (substitution), d (suppression), i (insertion), ou a (ajout).
Comment faire une substitution simple avec sed ?
On utilise la commande s, par exemple : sed 's/ancien/nouveau/' fichier.txt, qui remplace la première occurrence de 'ancien' par 'nouveau' sur chaque ligne.
Comment remplacer toutes les occurrences sur une ligne ?
On ajoute le modificateur g à la commande, par exemple : sed 's/erreur/avertissement/g' fichier.log, ce qui remplace toutes les occurrences sur chaque ligne.
Comment supprimer une ligne spécifique avec sed ?
Pour supprimer une ligne précise, on utilise la commande d avec le numéro de ligne : sed '3d' fichier.txt supprime la troisième ligne.
Comment supprimer les lignes contenant un motif précis ?
Il suffit d'utiliser : sed '/motif/d' fichier.txt. Par exemple, sed '/erreur/d' fichier.log supprime toutes les lignes contenant le mot 'erreur'.
Comment insérer du texte avant une ligne spécifique ?
On utilise la commande i. Exemple : sed '1i\# Entête ajoutée' fichier.txt insère la ligne avant la première ligne du fichier.
Comment ajouter du texte après une ligne spécifique ?
On utilise la commande a. Par exemple : sed '3a\Texte ajouté' fichier.txt ajoute la ligne après la troisième ligne.
Comment remplacer entièrement une ligne spécifique ?
La commande c permet de remplacer une ligne entière. Exemple : sed '5c\Nouvelle ligne' fichier.txt remplace la cinquième ligne par 'Nouvelle ligne'.
Comment appliquer les modifications directement dans le fichier ?
L'option -i permet l'édition en place. Exemple : sed -i 's/old/new/g' fichier.txt applique la modification directement dans le fichier sans passer par la sortie standard.
Comment créer une sauvegarde avant de modifier un fichier avec sed ?
On utilise -i avec une extension de sauvegarde : sed -i.bak 's/old/new/g' fichier.txt crée une copie fichier.txt.bak avant modification.
Peut-on utiliser sed avec des expressions régulières ?
Oui, sed supporte les expressions régulières pour rechercher des motifs complexes. Exemple : sed 's/^[0-9]/#/g' fichier.txt ajoute un # au début des lignes qui commencent par un chiffre.
Comment regrouper plusieurs commandes sed dans un fichier ?
On crée un fichier contenant plusieurs commandes sed, puis on l'exécute avec : sed -f script.sed fichier.txt.
Quels sont les cas d'usage les plus courants de sed ?
Sed est utilisé pour nettoyer des logs, modifier des fichiers de configuration, mettre à jour des chemins dans des scripts, reformater des CSV, ou injecter du contenu dans des templates HTML ou autres.