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.
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.
| Recette | Ce qu'elle fait |
|---|---|
sed 's/ancien/nouveau/' fichier | Remplace le premier ancien de chaque ligne par nouveau |
sed 's/ancien/nouveau/g' fichier | Remplace chaque ancien de la ligne (le g est global) |
sed 's/ancien/nouveau/2' fichier | Remplace seulement la deuxième correspondance de chaque ligne |
sed 's/ancien/nouveau/gi' fichier | Global 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.
| Recette | Ce qu'elle fait |
|---|---|
sed 's#/usr/local#/opt#g' fichier | Utilise # comme séparateur pour que les chemins restent lisibles |
sed 's|/var/www|/srv|g' fichier | Mê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.
| Recette | Ce qu'elle fait |
|---|---|
sed 's/ancien/nouveau/g' fichier | Prévisualise : affiche le résultat, laisse le fichier intact |
sed -i 's/ancien/nouveau/g' fichier | Valide : réécrit le fichier, sans sauvegarde, sans retour |
sed -i.bak 's/ancien/nouveau/g' fichier | Réécrit le fichier et garde l'original en fichier.bak |
sed -i.$(date +%F) 's/ancien/nouveau/g' fichier | Garde une sauvegarde datée comme fichier.2026-06-18 |
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.
| Recette | Ce qu'elle fait |
|---|---|
sed '/motif/d' fichier | Supprime chaque ligne qui correspond au motif |
sed '3d' fichier | Supprime seulement la ligne 3 |
sed '2,5d' fichier | Supprime les lignes 2 à 5 |
sed '/^$/d' fichier | Supprime les lignes vides |
sed '/^#/d' fichier | Supprime les lignes de commentaire qui commencent par # |
sed '$d' fichier | Supprime 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.
| Recette | Ce qu'elle fait |
|---|---|
sed -n '5p' fichier | Affiche la ligne 5 et rien d'autre |
sed -n '10,20p' fichier | Affiche les lignes 10 à 20, comme une fenêtre |
sed -n '/erreur/p' fichier | Affiche seulement les lignes qui correspondent à erreur (un grep déguisé) |
sed -n '$p' fichier | Affiche la dernière ligne |
sed -n '1,/FIN/p' fichier | Affiche 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 ».
| Recette | Ce qu'elle fait |
|---|---|
sed '2,4s/ancien/nouveau/g' fichier | Substitue seulement sur les lignes 2 à 4 |
sed '/debut/,/fin/s/ancien/nouveau/g' fichier | Substitue seulement entre les correspondances début et fin |
sed '/garder/!d' fichier | Supprime chaque ligne qui ne correspond pas à garder (notez le !) |
sed '0~2d' fichier | Supprime une ligne sur deux (syntaxe GNU premier~pas) |
sed '1!G;h;$!d' fichier | Une 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.
| Recette | Ce qu'elle fait |
|---|---|
sed 's/foo/bar/g; s/baz/qux/g' fichier | Deux substitutions en un passage, séparées par ; |
sed -e 's/foo/bar/g' -e '/^#/d' fichier | Substitue et supprime les commentaires, chacun dans son -e |
sed -e 's/a/1/' -e 's/b/2/' -e 's/c/3/' fichier | Enchaîne autant de blocs -e que nécessaire |
sed -i -e 's/ancien/nouveau/g' -e '/^$/d' fichier | Modifie 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.
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#gse 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.