DevGuide

Antiseche de la commande sed : substituer et supprimer

Sur cette page
  1. Substituer du texte : s/ancien/nouveau/g
  2. Modifier sur place avec une sauvegarde : -i
  3. Supprimer des lignes : la commande d
  4. Afficher des lignes précises : -n et p
  5. Adresses et plages
  6. Lancer plusieurs expressions : -e et ;
  7. Et après

Vous arrivez d'une barre de recherche pour changer du texte en ligne de commande sans ouvrir d'éditeur, et sed est l'outil qu'il vous faut. Les recettes que vous tapez vraiment sont juste en dessous, les plus demandées en premier, pour que vous puissiez copier, changer votre motif et passer à la suite. Le boulot vedette, c'est la substitution : sed 's/ancien/nouveau/g' réécrit un flux, et ajouter -i réécrit le fichier lui-même. Un truc à savoir avant de scroller. Par défaut, sed affiche chaque ligne et modifie la copie qui défile, il ne touche jamais à votre fichier tant que vous ne le demandez pas avec -i. C'est pour ça qu'un essai à blanc, c'est la même commande sans -i.

The short answer

Les recettes que vous tapez vraiment, vite : sed 's/ancien/nouveau/g' pour substituer (le g fait toutes les correspondances de la ligne), sed -i.bak 's/ancien/nouveau/g' fichier pour modifier le fichier sur place et garder une sauvegarde .bak, sed '/motif/d' fichier pour supprimer les lignes qui correspondent, et sed -n '10,20p' fichier pour afficher juste une plage. Lancez-la une fois sans -i pour prévisualiser.

s///gsubstituer, g = chaque correspondance
-i.bakmodifier sur place, garder une sauvegarde
-n + pafficher seulement les lignes choisies
Fiche reponse : substituer avec s slash ancien slash nouveau slash g, modifier sur place avec -i et une sauvegarde .bak, supprimer des lignes avec la commande d, et afficher des lignes precises avec -n et p.
Chaque recette que vous tapez, regroupee selon ce que vous cherchez vraiment a faire. PNG

Vous arrivez d'une barre de recherche pour changer du texte en ligne de commande sans ouvrir d'éditeur, et sed est l'outil qu'il vous faut. Les recettes que vous tapez vraiment sont juste en dessous, les plus demandées en premier, pour que vous puissiez copier, changer votre motif et retourner à ce que vous faisiez.

Un truc à savoir avant de scroller. Par défaut, sed affiche chaque ligne et modifie la copie qui défile, jamais le fichier sur le disque. Il n'écrit le résultat que lorsque vous ajoutez -i. C'est tout le modèle de sécurité : la commande sans -i est votre essai à blanc, la même commande avec -i est la validation. Prenez l'habitude et vous ne perdrez presque jamais rien.

Substituer du texte : s/ancien/nouveau/g

Celle que tout le monde cherche sur Google. Le s veut dire substituer, les barres obliques séparent le motif de son remplacement, et le drapeau à la fin décide combien de correspondances vous touchez. Sans g, vous ne changez que la première correspondance de chaque ligne, ce qui surprend les gens sans arrêt.

RecetteCe qu'elle fait
sed 's/ancien/nouveau/' fichierRemplace le premier ancien de chaque ligne par nouveau
sed 's/ancien/nouveau/g' fichierRemplace chaque ancien de la ligne (le g est global)
sed 's/ancien/nouveau/2' fichierRemplace seulement la deuxième correspondance de chaque ligne
sed 's/ancien/nouveau/gi' fichierGlobal et insensible à la casse, donc Ancien, ANCIEN, ancien correspondent
sed 's/ancien/nouveau/3g' fichierÀ partir de la troisième correspondance, remplace le reste

Le séparateur n'est pas obligé d'être une barre oblique. Quand votre motif contient des chemins pleins de barres, changez le délimiteur pour autre chose et vos yeux vous remercieront.

RecetteCe qu'elle fait
sed 's#/usr/local#/opt#g' fichierUtilise # comme séparateur pour que les chemins restent lisibles
sed 's|/var/www|/srv|g' fichierMême idée avec |, pratique pour les URL et les répertoires

Si vous préférez cliquer pour obtenir l'expression exacte plutôt qu'échapper les délimiteurs à la main, notre générateur de commande sed construit la ligne pour vous et affiche les drapeaux côte à côte. Aucune honte à le garder ouvert dans un onglet.

Modifier sur place avec une sauvegarde : -i

Par défaut, sed écrit à l'écran, ce qui est parfait pour prévisualiser. Quand vous êtes prêt à changer le fichier lui-même, -i le modifie sur place. Le geste prudent consiste à donner un suffixe à -i pour qu'il sauvegarde l'original d'abord.

RecetteCe qu'elle fait
sed 's/ancien/nouveau/g' fichierPrévisualise : affiche le résultat, laisse le fichier intact
sed -i 's/ancien/nouveau/g' fichierValide : réécrit le fichier, sans sauvegarde, sans retour
sed -i.bak 's/ancien/nouveau/g' fichierRéécrit le fichier et garde l'original en fichier.bak
sed -i.$(date +%F) 's/ancien/nouveau/g' fichierGarde une sauvegarde datée comme fichier.2026-06-18
GNU/Linux
sed -i.bak 's/ancien/nouveau/g' config.txt

La forme -i.bak, c'est GNU sed (celui de la plupart des machines Linux). Sur macOS et les BSD le drapeau existe toujours mais veut un argument explicite : écrivez sed -i '' 's/ancien/nouveau/g' fichier pour ne pas garder de sauvegarde, ou sed -i .bak ... avec un espace. Confondre les deux est l'erreur sed la plus courante sur un Mac, donc si une commande tirée d'un tutoriel Linux échoue sur macOS, c'est souvent pour ça.

Supprimer des lignes : la commande d

d supprime des lignes entières. Vous la pointez sur une adresse, un numéro de ligne, une plage ou un motif, et chaque ligne qui correspond disparaît de la sortie. Comme pour la substitution, laissez -i de côté d'abord pour voir exactement ce qui partirait.

RecetteCe qu'elle fait
sed '/motif/d' fichierSupprime chaque ligne qui correspond au motif
sed '3d' fichierSupprime seulement la ligne 3
sed '2,5d' fichierSupprime les lignes 2 à 5
sed '/^$/d' fichierSupprime les lignes vides
sed '/^#/d' fichierSupprime les lignes de commentaire qui commencent par #
sed '$d' fichierSupprime la dernière ligne ($ veut dire la dernière)

Deux d'entre elles sont vraiment utiles au quotidien. sed '/^$/d' retire les lignes vides d'une config ou d'un log, et sed '/^#/d' enlève les commentaires pour que vous voyiez ce qu'un fichier de config très annoté règle vraiment. Enchaînez-les et vous obtenez une vue propre, sans commentaires, en un seul passage.

Afficher des lignes précises : -n et p

Ce duo, c'est sed qui fait le travail pour lequel les gens dégainent head, tail ou grep, mais avec un contrôle chirurgical de la plage. L'astuce, c'est le drapeau -n. Il coupe l'affichage automatique, du coup p n'affiche que les lignes que vous choisissez, exactement une fois.

RecetteCe qu'elle fait
sed -n '5p' fichierAffiche la ligne 5 et rien d'autre
sed -n '10,20p' fichierAffiche les lignes 10 à 20, comme une fenêtre
sed -n '/erreur/p' fichierAffiche seulement les lignes qui correspondent à erreur (un grep déguisé)
sed -n '$p' fichierAffiche la dernière ligne
sed -n '1,/FIN/p' fichierAffiche du début jusqu'à la première ligne qui correspond à FIN

Oubliez le -n et vous obtenez chaque ligne deux fois : une par l'affichage automatique de sed, une par votre p. Cette sortie en double, c'est le classique « pourquoi tout est affiché deux fois », et la correction est toujours le -n manquant.

Adresses et plages

Presque chaque commande sed peut être limitée à une adresse, qui est ce qui se place devant la commande. Une adresse peut être un numéro de ligne, un $ pour la dernière ligne, une /regex/, ou une plage premier,dernier. C'est comme ça que vous dites « ne fais ça que sur les lignes qui m'intéressent ».

RecetteCe qu'elle fait
sed '2,4s/ancien/nouveau/g' fichierSubstitue seulement sur les lignes 2 à 4
sed '/debut/,/fin/s/ancien/nouveau/g' fichierSubstitue seulement entre les correspondances début et fin
sed '/garder/!d' fichierSupprime chaque ligne qui ne correspond pas à garder (notez le !)
sed '0~2d' fichierSupprime une ligne sur deux (syntaxe GNU premier~pas)
sed '1!G;h;$!d' fichierUne commande célèbre qui inverse un fichier (l'astuce tac)

Le ! après une adresse l'inverse, donc /garder/!d veut dire « supprime les lignes qui ne correspondent pas à garder », ce qui est une façon nette de réduire un fichier aux seules lignes voulues. La forme 2,4s/// est la plus courante : limiter une substitution à un bloc plutôt qu'à tout le fichier.

Lancer plusieurs expressions : -e et ;

Les vraies modifications ont souvent besoin de plus d'une commande en un seul passage. Vous avez deux façons de les empiler : les séparer par un point-virgule, ou donner à chacune son propre drapeau -e. Les deux s'exécutent dans l'ordre, de gauche à droite, sur chaque ligne.

RecetteCe qu'elle fait
sed 's/foo/bar/g; s/baz/qux/g' fichierDeux substitutions en un passage, séparées par ;
sed -e 's/foo/bar/g' -e '/^#/d' fichierSubstitue et supprime les commentaires, chacun dans son -e
sed -e 's/a/1/' -e 's/b/2/' -e 's/c/3/' fichierEnchaîne autant de blocs -e que nécessaire
sed -i -e 's/ancien/nouveau/g' -e '/^$/d' fichierModifie sur place : remplace le texte et retire les lignes vides

La forme -e et la forme point-virgule sont équivalentes, donc choisissez celle qui se lit le mieux. Beaucoup de gens trouvent une pile de drapeaux -e plus facile à parcourir qu'une longue chaîne à point-virgules, surtout quand chaque étape fait quelque chose de différent. Un nettoyage typique qui prévisualise d'abord, puis valide avec une sauvegarde, ressemble à ceci :

# 1. previsualiser chaque changement sans toucher au fichier
sed -e 's/ancien/nouveau/g' -e '/^#/d' -e '/^$/d' config.txt

# 2. content du resultat ? relancer avec -i.bak pour valider et garder une sauvegarde
sed -i.bak -e 's/ancien/nouveau/g' -e '/^#/d' -e '/^$/d' config.txt

# 3. pour un jeu de modifications reutilise, mettez-les dans un fichier script
sed -i.bak -f cleanup.sed config.txt

Pour un jeu de commandes très réutilisé, les mettre dans un fichier .sed et lancer sed -f script.sed fichier garde votre historique shell propre et la logique au même endroit.

Terminal montrant les commandes sed courantes : substituer avec s slash ancien slash nouveau slash g, modifier sur place avec -i.bak et une sauvegarde, supprimer les lignes qui correspondent avec la commande d, et afficher une plage avec -n 10,20 p.
Les recettes les plus demandees, en premier. Copiez, changez votre motif, et c'est fait. PNG

Mon avis : prévisualisez toujours sans -i, et dégainez -i.bak pour valider. La meilleure habitude avec sed, c'est de lancer la commande une fois sans -i, de lire la sortie, et seulement ensuite d'ajouter -i (ou mieux, -i.bak) pour écrire le résultat. Ça coûte deux secondes et ça vous sauve de la seule modification qui correspondait à plus que prévu. La deuxième habitude à prendre, c'est de changer de délimiteur dès que votre motif contient une barre oblique : s#/ancien/chemin#/nouveau/chemin#g se lit clairement, alors que la version tout en barres est un mur d'antislashs que vous allez mal lire.

Et après

Voilà la trousse de travail. Substituer, modifier sur place, supprimer, afficher, limiter avec des adresses, et empiler les commandes avec -e. La plupart de l'usage réel de sed, c'est un mélange de ça, et le reste vous le recherchez comme tout le monde.

Si votre journée déborde de la simple substitution, le même réflexe se transpose. Vous cherchez d'abord les fichiers à passer à sed ? Voyez notre antisèche de la commande find. Vous extrayez les lignes qui correspondent dans des logs avant de les réécrire ? Un outil différent, le même réflexe : gardez une bonne antisèche à portée et arrêtez de mémoriser les drapeaux.

Questions fréquentes

Comment remplacer du texte dans un fichier avec sed ?

Utilisez la commande s : sed -i "s/ancien/nouveau/g" fichier.txt remplace chaque occurrence de ancien par nouveau directement dans le fichier. Le s veut dire substituer, le drapeau g signifie chaque correspondance sur une ligne et pas seulement la premiere, et -i ecrit le changement. Lancez-la d abord sans -i pour afficher le resultat a l ecran et verifier qu elle fait ce que vous attendez, car -i n a pas de retour en arriere.

Comment modifier un fichier sur place avec sed ?

Ajoutez le drapeau -i, comme dans sed -i "s/foo/bar/g" config.txt. GNU sed vous laisse aussi garder une sauvegarde en donnant un suffixe a -i sans espace, donc sed -i.bak "s/foo/bar/g" config.txt ecrit le changement et laisse l original en config.txt.bak. Sur macOS ou BSD sed la syntaxe differe : il faut ecrire -i "" pour ne pas garder de sauvegarde, ce qui est le piege multiplateforme le plus courant.

Comment supprimer des lignes avec sed ?

La commande d supprime. sed "/motif/d" fichier retire chaque ligne qui correspond au motif, sed "3d" fichier supprime la ligne 3, et sed "2,5d" fichier supprime les lignes 2 a 5. Ajoutez -i pour rendre la suppression definitive dans le fichier. Comme toujours, lancez-la sans -i d abord pour voir exactement quelles lignes disparaitraient.

Comment afficher seulement certaines lignes avec sed ?

Associez -n a la commande p. Le drapeau -n dit a sed d arreter l affichage automatique, puis p affiche seulement ce que vous selectionnez : sed -n "5p" fichier affiche la ligne 5, sed -n "10,20p" fichier affiche les lignes 10 a 20, et sed -n "/erreur/p" fichier affiche seulement les lignes qui correspondent. Sans -n vous verriez ces lignes deux fois, une fois par l affichage automatique et une fois par p.

Quelle difference entre sed et un vrai editeur de texte ?

sed est un editeur de flux : il lit l entree ligne par ligne, applique vos commandes et ecrit le resultat, sans ecran interactif. Cela le rend ideal pour des modifications scriptees et repetables sur beaucoup de fichiers ou dans un pipeline, la ou ouvrir vim ou nano a la main serait lent et impossible a automatiser. Pour une retouche unique a la main un editeur classique est plus agreable, mais pour un chercher-remplacer sur toute une arborescence, sed gagne.