Aller au contenu
Administration Linux medium

Maîtriser sed : Édition de texte en flux

8 min de lecture

Quand on doit modifier rapidement le contenu de plusieurs fichiers, effectuer des remplacements massifs ou supprimer certaines lignes en fonction d’un motif, sed est l’outil incontournable. Conçu 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.

  • Remplacer du texte avec la commande s/ancien/nouveau/
  • Supprimer, insérer et modifier des lignes ciblées
  • Utiliser des adresses (numéros de ligne, motifs) pour cibler précisément
  • Éditer des fichiers en place avec -i (en sécurité)

sed fait partie des commandes de traitement de texte sous Linux. Chaque outil a sa spécialité :

CommandeSpécialitéQuand l’utiliser
sedÉditer du texte en fluxRemplacer, supprimer, insérer du texte
grepRechercher des patternsFiltrer les lignes matchant un motif
awkTraiter des données tabulairesExtraire/transformer des colonnes
trTranslitérer des caractèresRemplacer caractère par caractère
cutExtraire des colonnesDécouper par délimiteur ou position
findRechercher des fichiersTrouver des fichiers par attributs

Combinaisons fréquentes :

Fenêtre de terminal
# grep + sed : filtrer puis transformer
grep "ERROR" log.txt | sed 's/ERROR/ALERTE/g'
# sed + awk : modifier puis extraire
sed 's/;/,/g' data.csv | awk -F',' '{print $2}'
# find + sed : modifier plusieurs fichiers
find . -name "*.conf" -exec sed -i 's/old/new/g' {} +

🧠 Modèle mental — Comment fonctionne sed

sed = Lire ligne → Appliquer commandes → Afficher résultat

Modèle mental sed : Entrée (fichier/stdin) → Commande (s/ancien/nouveau/g) → Sortie (stdout ou fichier avec -i)

Points clés

  • sed lit le fichier ligne par ligne (flux, pas tout en mémoire)
  • Chaque ligne passe par les commandes dans l'ordre
  • Par défaut, sed affiche le résultat sur stdout (pas de modification du fichier)
  • La commande s/ancien/nouveau/ remplace du texte
  • Sans flag g, seule la première occurrence par ligne est remplacée
  • Avec -i, sed modifie directement le fichier (danger !)

Règles d'or

1
Tester sans -i avant d'éditer en place Prévisualiser les changements avec sed '...' fichier avant sed -i '...' fichier
2
Utiliser un délimiteur adapté au contenu Si le texte contient des /, utiliser # ou @ comme délimiteur : s#/chemin#/autre#

Vocabulaire essentiel

s/old/new/
Substitution : remplace old par new (1ère occurrence)
s/old/new/g
Substitution globale (toutes les occurrences)
d
Delete : supprime la ligne
p
Print : affiche la ligne
-i
In-place : modifie le fichier directement
-n
No-print : n'affiche rien sauf avec p
📚 Pour aller plus loin — 12 options avancées
a\texte
Append : ajoute après la ligne
i\texte
Insert : insère avant la ligne
c\texte
Change : remplace toute la ligne
/regex/
Adresse : cible les lignes matchant regex
1,10
Plage : lignes 1 à 10
/début/,/fin/
Plage entre deux patterns
-E
Extended regex (ERE) : +, ?, |, () sans escape
&
Dans s///, représente le texte matché
\1, \2
Backreferences : groupes capturés
y/abc/xyz/
Translitération (comme tr)
q
Quit : arrête le traitement
N
Next : ajoute la ligne suivante au buffer

sed lit le fichier ligne par ligne (flux), applique les transformations demandées, puis affiche le résultat. Par défaut, le fichier original n’est pas modifié.

Fenêtre de terminal
sed [OPTIONS] 'COMMANDE' [FICHIER]

La commande sed suit une logique simple :

ÉtapeQuestionExemplesObligatoire ?
EntréeD’où vient le texte ?fichier.txt, stdin (pipe)⚠️ Un des deux
CommandeQuelle transformation ?s/old/new/g, d, p✅ Oui
SortieOù va le résultat ?stdout (défaut) ou fichier (-i)❌ Non (défaut : stdout)

La commande la plus utilisée est s (substitution) :

Fenêtre de terminal
sed 's/ancien/nouveau/' fichier.txt
ÉlémentSignification
sCommande de substitution
/Délimiteur (peut être #, @, |)
ancienTexte ou regex à rechercher
nouveauTexte de remplacement

Par défaut, seule la première occurrence par ligne est remplacée. Pour remplacer toutes les occurrences, ajoutez le flag g :

Fenêtre de terminal
sed 's/foo/bar/g' fichier.txt
CommandeEffetExemple
dSupprime la ligne/debug/d
pAffiche la ligne-n '/error/p'
i\texteInsère avant la ligne1i\# En-tête
a\texteAjoute après la ligne$a\# Fin
c\texteRemplace la ligne entière3c\Nouvelle ligne
qQuitte après cette ligne10q

Par défaut, sed applique la commande à toutes les lignes. On peut cibler avec des adresses :

AdresseCe qu’elle cibleExemple
5Ligne numéro 5sed '5d' f.txt
$Dernière lignesed '$d' f.txt
/pattern/Lignes contenant “pattern”sed '/error/d' f.txt
1,10Lignes 1 à 10sed '1,10d' f.txt
/début/,/fin/Plage entre deux patternssed '/BEGIN/,/END/d' f.txt
FlagEffetExemple
gGlobal (toutes occurrences)s/a/b/g
iInsensible à la casses/error/warning/gi
pAffiche si substitution faite-n 's/a/b/p'
2Remplace la 2ème occurrences/a/b/2

Quand le texte contient des /, utilisez un autre délimiteur :

Fenêtre de terminal
# ❌ Illisible et source d'erreurs
sed 's/\/var\/log/\/opt\/logs/g' fichier.txt
# ✅ Beaucoup plus clair avec #
sed 's#/var/log#/opt/logs#g' fichier.txt

Par défaut, sed affiche le résultat sur stdout sans modifier le fichier. Pour modifier directement :

Fenêtre de terminal
# ⚠️ Modifie le fichier (DANGER si erreur)
sed -i 's/old/new/g' fichier.txt
# ✅ Crée un backup avant modification
sed -i.bak 's/old/new/g' fichier.txt

Règle d’or : toujours tester sans -i d’abord !

Fenêtre de terminal
# 1. Tester
sed 's/old/new/g' fichier.txt
# 2. Vérifier le résultat, puis seulement :
sed -i.bak 's/old/new/g' fichier.txt
ErreurCauseSolution
Seule la 1ère occurrence est remplacéeOubli du flag gAjouter g : s/old/new/g
Erreur de syntaxe avec des chemins/ dans le texteUtiliser # comme délimiteur
Fichier modifié par erreur-i sans test préalableToujours tester sans -i d’abord
Rien ne se passePas de match (casse ?)Vérifier avec grep ou utiliser i (insensible)

Maintenant que vous comprenez la logique de sed, voici des modèles courants pour des traitements fréquents.

Ces recettes couvrent les cas d'usage les plus fréquents. Cliquez sur un pattern pour voir la formule complète et un exemple prêt à copier.

Substitution simple Base

Remplacer la première occurrence d'un texte sur chaque ligne.

sed 's/erreur/warning/' log.txt
Formule sed 's/ancien/nouveau/' <fichier>
Exemple
sed 's/erreur/warning/' log.txt
Paramètres
  • ancien — Texte ou regex à rechercher
  • nouveau — Texte de remplacement
Substitution globale Base

Remplacer toutes les occurrences d'un texte sur chaque ligne.

sed 's/foo/bar/g' fichier.txt
Formule sed 's/ancien/nouveau/g' <fichier>
Exemple
sed 's/foo/bar/g' fichier.txt
Paramètres
  • g — Flag global : toutes les occurrences
Substitution insensible à la casse Base

Remplacer un texte quelle que soit la casse.

sed 's/error/warning/gi' log.txt
Formule sed 's/ancien/nouveau/gi' <fichier>
Exemple
sed 's/error/warning/gi' log.txt
Paramètres
  • i — Flag insensible à la casse (GNU sed)
Délimiteur alternatif Base

Éviter les échappements quand le texte contient des /.

sed 's#/var/log#/opt/logs#g' paths.txt
Formule sed 's#ancien#nouveau#g' <fichier>
Exemple
sed 's#/var/log#/opt/logs#g' paths.txt
Paramètres
  • # — Délimiteur alternatif (#, @, |, etc.)
Supprimer lignes par motif Base

Supprimer les lignes contenant un motif.

sed '/DEBUG/d' log.txt
Formule sed '/motif/d' <fichier>
Exemple
sed '/DEBUG/d' log.txt
Paramètres
  • motif — Pattern regex à matcher
  • d — Commande delete
Supprimer lignes vides Base

Nettoyer un fichier en supprimant les lignes vides.

sed '/^$/d' texte.txt
Formule sed '/^$/d' <fichier>
Exemple
sed '/^$/d' texte.txt
Paramètres
  • ^$ — Regex : début = fin (ligne vide)
Cibler par numéro de ligne Inter.

Appliquer une commande uniquement sur une ligne spécifique.

sed '5d' fichier.txt # supprime ligne 5
Formule sed 'N<commande>' <fichier>
Exemple
sed '5d' fichier.txt  # supprime ligne 5
Paramètres
  • N — Numéro de ligne
Plage de lignes Inter.

Appliquer une commande sur un ensemble de lignes.

sed '2,5d' fichier.txt # supprime lignes 2 à 5
Formule sed 'N,M<commande>' <fichier>
Exemple
sed '2,5d' fichier.txt  # supprime lignes 2 à 5
Paramètres
  • N,M — De la ligne N à M incluses
Plage entre deux motifs Inter.

Cibler les lignes entre deux patterns.

sed '/BEGIN/,/END/d' fichier.txt
Formule sed '/début/,/fin/<commande>' <fichier>
Exemple
sed '/BEGIN/,/END/d' fichier.txt
Paramètres
  • /début/ — Pattern de début de plage
  • /fin/ — Pattern de fin de plage
Édition en place Inter.

Modifier un fichier directement.

sed -i 's/old/new/g' config.conf
Formule sed -i '<commande>' <fichier>
Exemple
sed -i 's/old/new/g' config.conf
Paramètres
  • -i — In-place : modifie le fichier
Éviter si : TOUJOURS tester sans -i d'abord !
Édition en place avec backup Base

Modifier un fichier en gardant une sauvegarde.

sed -i.bak 's/old/new/g' config.conf
Formule sed -i.bak '<commande>' <fichier>
Exemple
sed -i.bak 's/old/new/g' config.conf
Paramètres
  • -i.bak — Crée fichier.bak avant modification
Insérer une ligne Inter.

Ajouter du texte avant une ligne.

sed '1i\# En-tête ajouté' fichier.txt
Formule sed '<adresse>i\<texte>' <fichier>
Exemple
sed '1i\# En-tête ajouté' fichier.txt
Paramètres
  • i\ — Insert : ajoute avant la ligne
Ajouter après une ligne Inter.

Ajouter du texte après une ligne.

sed '/END/a\# Commentaire' fichier.txt
Formule sed '<adresse>a\<texte>' <fichier>
Exemple
sed '/END/a\# Commentaire' fichier.txt
Paramètres
  • a\ — Append : ajoute après la ligne
Afficher seulement les lignes matchées Inter.

Extraire les lignes correspondant à un motif (comme grep).

sed -n '/ERROR/p' log.txt
Formule sed -n '/motif/p' <fichier>
Exemple
sed -n '/ERROR/p' log.txt
Paramètres
  • -n — Supprime l'affichage auto
  • p — Print : affiche la ligne
Références arrière (groupes) Avancé

Réutiliser des parties capturées dans le remplacement.

sed 's/\([0-9]*\)/ID:\1/' fichier.txt
Formule sed 's/\(motif\)/\1 ajout/' <fichier>
Exemple
sed 's/\([0-9]*\)/ID:\1/' fichier.txt
Paramètres
  • \(\) — Groupe de capture
  • \1 — Référence au 1er groupe
Utiliser le texte matché (&) Inter.

Insérer le texte matché dans le remplacement.

sed 's/[0-9]\+/(&)/g' fichier.txt
Formule sed 's/motif/[&]/g' <fichier>
Exemple
sed 's/[0-9]\+/(&)/g' fichier.txt
Paramètres
  • & — Représente le texte matché entier

Ces erreurs courantes peuvent faire perdre du temps ou causer des dégâts. Les pièges les plus critiques sont affichés en premier.

Édition -i sans prévisualisation

sed -i 's/important/supprimé/g' fichier.conf exécuté directement

Danger
Le piège : sed -i 's/important/supprimé/g' fichier.conf exécuté directement
Symptôme : Données perdues ou fichier corrompu
Cause : L'option -i modifie le fichier sans possibilité de retour
Correction : TOUJOURS tester sans -i d'abord, ou utiliser -i.bak
sed 's/old/new/g' fichier  # tester d'abord, puis sed -i.bak
→ Voir le pattern qui résout
Oubli du flag g

sed 's/foo/bar/' ne remplace que la première occurrence par ligne

Attention
Le piège : sed 's/foo/bar/' ne remplace que la première occurrence par ligne
Symptôme : Certaines occurrences ne sont pas remplacées
Cause : Sans g, sed remplace uniquement la première occurrence sur chaque ligne
Correction : Ajouter le flag g pour remplacer toutes les occurrences
sed 's/foo/bar/g' fichier.txt
Slash dans le texte à remplacer

sed 's//var/log//opt/logs/' provoque une erreur de syntaxe

Attention
Le piège : sed 's//var/log//opt/logs/' provoque une erreur de syntaxe
Symptôme : Erreur "unknown command" ou résultat inattendu
Cause : Les / dans le texte sont interprétés comme délimiteurs
Correction : Utiliser un délimiteur alternatif (#, @, |)
sed 's#/var/log#/opt/logs#g' fichier.txt
Caractères spéciaux regex non échappés

sed 's/fichier.txt/fichier.log/' matche aussi "fichierXtxt"

Attention
Le piège : sed 's/fichier.txt/fichier.log/' matche aussi "fichierXtxt"
Symptôme : Matchs inattendus : le . matche n'importe quel caractère
Cause : Le point est un métacaractère regex (matche tout)
Correction : Échapper les caractères spéciaux avec \
sed 's/fichier\.txt/fichier.log/g' fichier
Regex gourmande (.* trop large)

sed 's/<.*>//g' supprime tout entre le premier < et le dernier >

Attention
Le piège : sed 's/<.*>//g' supprime tout entre le premier < et le dernier >
Symptôme : Supprime plus que prévu (ex: "<a>text<b>" → "" au lieu de "text")
Cause : .* est gourmand : matche le maximum possible
Correction : Utiliser une classe négative [^>]* au lieu de .*
sed 's/<[^>]*>//g' fichier
Incompatibilité -i entre GNU et BSD sed

sed -i 's/old/new/' fichier fonctionne sur Linux mais pas sur macOS

Info
Le piège : sed -i 's/old/new/' fichier fonctionne sur Linux mais pas sur macOS
Symptôme : Erreur "invalid command code" sur macOS
Cause : BSD sed (macOS) requiert une extension, même vide : -i ''
Correction : Utiliser -i '' sur macOS ou installer GNU sed
sed -i '' 's/old/new/' fichier  # macOS
Insertion de nouvelle ligne dans le remplacement

sed 's/$/\n/' n'ajoute pas de vraie nouvelle ligne

Info
Le piège : sed 's/$/\n/' n'ajoute pas de vraie nouvelle ligne
Symptôme : Littéral \n apparaît au lieu d'un saut de ligne
Cause : La syntaxe \n n'est pas portable dans le remplacement
Correction : Utiliser $'\n' en bash ou une vraie nouvelle ligne échappée
sed 's/$/\
/' fichier  # ou avec $'...'

📋 Cheatsheet sed

📝 Syntaxe :

sed 'cmd' fichier Applique cmd au fichier
sed -e 'cmd1' -e 'cmd2' Plusieurs commandes
cmd | sed 'cmd' Depuis un pipe

🚀 Commandes types :

Substitution simple Remplacer la première occurrence d'un texte sur chaque ligne.
sed 's/erreur/warning/' log.txt
Substitution globale Remplacer toutes les occurrences d'un texte sur chaque ligne.
sed 's/foo/bar/g' fichier.txt
Substitution insensible à la casse Remplacer un texte quelle que soit la casse.
sed 's/error/warning/gi' log.txt
Délimiteur alternatif Éviter les échappements quand le texte contient des /.
sed 's#/var/log#/opt/logs#g' paths.txt
Supprimer lignes par motif Supprimer les lignes contenant un motif.
sed '/DEBUG/d' log.txt

⚙️ Options

-i Édition en place (modifie le fichier) sed -i 's/a/b/' f.txt
-i.bak Édition en place avec backup sed -i.bak 's/a/b/' f.txt
-n Mode silencieux (n'affiche rien par défaut) sed -n '/err/p' f.txt
-E ou -r Regex étendu (ERE) sed -E 's/[0-9]+/X/g'
-e Spécifie une commande (pour en chaîner) sed -e 's/a/b/' -e 's/c/d/'
-f script.sed Lit les commandes depuis un fichier sed -f cmds.sed fichier

🔗 Composition

s#old#new# Délimiteur # (pour les chemins) s#/var#/opt#g
s@old@new@ Délimiteur @ s@http://@https://@g
s|old|new| Délimiteur | s|foo|bar|g

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

10 questions
5 min.
80% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

La commande sed est un outil essentiel pour quiconque travaille régulièrement en ligne de commande. Grâce à sa syntaxe concise et sa capacité à traiter des flux de texte, elle permet de modifier, nettoyer et transformer du contenu rapidement et efficacement. Que ce soit pour un remplacement ponctuel, un nettoyage de logs ou une modification en masse de fichiers de configuration, la maîtrise de sed fait gagner un temps précieux.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.