Aller au contenu

sed

À quoi il sert

sed (stream editor), né aux Bell Labs en 1974, est un éditeur de flux : il lit son entrée ligne par ligne, place chaque ligne dans son espace de travail, lui applique un script de commandes, puis l'écrit. Sa commande reine est la substitution s/motif/remplacement/drapeaux, avec ses références arrière (\1, &) ; s'y ajoutent la suppression (d), l'affichage (p, avec -n), l'arrêt (q), l'insertion (a, i, c) et des adresses qui restreignent chaque commande à des numéros de ligne, à des lignes qui correspondent à une expression, ou à des intervalles entre deux adresses. Un second tampon, l'espace de réserve, et les commandes N, P, D permettent les traitements sur plusieurs lignes. GNU sed ajoute l'édition sur place (-i), les expressions étendues (-E), --debug (4.6 et plus) et --sandbox. Ubuntu 24.04 et Debian 13 fournissent GNU sed 4.9 ; GNU a publié la 4.10 en avril 2026.

Quand le choisir

Pour une transformation ligne à ligne et sans état : remplacer une valeur, normaliser un format de date, retirer les commentaires d'un fichier, extraire une plage de lignes, anonymiser un journal avant de le transmettre. Dès qu'il faut compter, comparer des champs ou se souvenir de plusieurs lignes, awk est plus lisible. Pour un fichier structuré (JSON, YAML, INI complexe), préférez un outil qui connaît le format (jq, yq) ou la gestion de configuration (Ansible et ses modules lineinfile et ini_file).

Points d'attention

  • -i remplace le fichier par un nouveau (nouvel inode) : les liens physiques ne suivent pas, un lien symbolique devient un fichier ordinaire sans --follow-symlinks. Sur macOS et les BSD, -i exige un argument (sed -i '') : la même commande n'est pas portable.
  • Une modification de configuration par sed -i doit être idempotente et vérifiée (diff -u, second passage sans changement) ; sinon, elle crée de la dérive de configuration.
  • Une valeur insérée dans le remplacement doit être échappée : &, \, le délimiteur et le saut de ligne y ont un sens.
  • Les commandes e, r, w et le drapeau e de s lisent, écrivent des fichiers ou exécutent des commandes : un script construit à partir de données doit tourner avec --sandbox, qui les interdit.
  • s ne remplace que la première occurrence de chaque ligne sans le drapeau g, et .* est gourmand.

Par où commencer

Les leçons sed : le cycle et la substitution et sed : éditer des fichiers sans les casser du cours Traiter du texte. Puis le manuel de GNU sed et la spécification POSIX de sed, qui délimite ce qui est portable.