Débuter avec sed : rechercher et remplacer en CLI
Apprenez à utiliser sed pour rechercher, remplacer et modifier un fichier en ligne de commande avec des exemples simples et progressifs.

sed est un outil classique de la ligne de commande Linux pour transformer du texte rapidement. Son nom vient de stream editor : il lit des données ligne par ligne, applique des instructions, puis affiche ou écrit le résultat.
Pour débuter, sed est particulièrement utile dans trois cas : rechercher un motif, remplacer une partie du texte et modifier un fichier sans ouvrir d’éditeur interactif. On le rencontre souvent dans les scripts shell, l’administration système, le traitement de journaux et la préparation de fichiers de configuration.
Ce tutoriel explique les bases de façon progressive. Vous allez voir comment tester une commande sur la sortie standard, cibler certaines lignes, remplacer la première occurrence ou toutes les occurrences, enregistrer les changements directement dans un fichier et éviter les erreurs fréquentes liées aux guillemets, aux délimiteurs et aux expressions régulières.
Prérequis
- Un système Linux avec un shell comme
bash. - Un terminal.
- Les commandes de base :
cat,echo,printf,cp,grepetlesssont utiles mais non obligatoires. - Une version de
sedinstallée, ce qui est généralement le cas sur Linux.
Matériel nécessaire
- Un terminal Linux
- La commande sed
- Un fichier texte de test
Étapes
Comprendre le rôle de sed
Avant d’écrire des commandes, il faut comprendre le comportement général de
sed. Dans son usage le plus courant, l’outil lit une entrée texte, traite chaque ligne selon les commandes fournies, puis affiche le résultat sur la sortie standard.Autrement dit, si vous lancez une commande de remplacement simple, le fichier d’origine n’est pas modifié tant que vous n’utilisez pas une option d’édition en place. Ce point est important pour débuter sereinement : on peut tester sans risque.
La forme la plus simple ressemble à ceci :
bashsed 'commande' fichier.txtExemple minimal :
bashprintf 'bonjour\n' | sed 's/bonjour/salut/'Résultat attendu :
bashsalutIci,
ssignifie substitute, donc remplacer. La structure générale de cette commande est :bashs/motif/remplacement/Le premier élément est le texte recherché, le second est le texte de remplacement. Par défaut,
sedremplace la première occurrence trouvée sur chaque ligne.Créer un fichier de test pour s’exercer

Pour manipuler
sedsans risque, créez un petit fichier de démonstration. Utilisez par exemplecatavec une redirection :bashcat > exemple.txt <<'EOF' serveur=web01 port=8080 mode=debug serveur=web02 URL=/api/v1 [email protected] EOFAffichez ensuite son contenu :
bashcat exemple.txtVous obtenez un fichier simple avec plusieurs cas utiles : des clés, des valeurs, des chiffres, des caractères spéciaux comme
/et une adresse e-mail.Pendant tout le tutoriel, gardez en tête une bonne pratique : si vous comptez modifier un vrai fichier, commencez toujours par une copie :
bashcp exemple.txt exemple.sauvegarde.txtAinsi, vous pouvez comparer avant et après ou revenir facilement à l’état initial.
Afficher un fichier avec sed
Même si
catsuffit pour lire un fichier, il est utile de voir quesedpeut aussi afficher l’entrée telle quelle :bashsed '' exemple.txtSur certains environnements, on préfère directement une commande explicite :
bashsed -n 'p' exemple.txtL’option
-ndemande àsedde ne pas afficher automatiquement les lignes. La commandepsignifie print, donc afficher.Cette combinaison est pratique quand vous voulez n’afficher que certaines lignes. Par exemple, pour afficher uniquement la ligne 2 :
bashsed -n '2p' exemple.txtPour afficher les lignes 2 à 4 :
bashsed -n '2,4p' exemple.txtCette logique d’adressage revient souvent avec
sed: on peut appliquer une commande à une ligne précise, à une plage de lignes ou aux lignes qui correspondent à un motif.Rechercher visuellement avec un motif
sedn’est pas un moteur de recherche dédié commegrep, mais il sait très bien cibler les lignes correspondant à un motif. Pour afficher seulement les lignes contenantserveur:bashsed -n '/serveur/p' exemple.txtPour afficher les lignes contenant
web:bashsed -n '/web/p' exemple.txtLa syntaxe
/motif/sert d’adresse : elle désigne les lignes qui correspondent au motif. Ensuite, la commandeples affiche.Vous pouvez aussi combiner adresse et remplacement. Par exemple, remplacer
debugparproductionseulement sur les lignes contenantmode:bashsed '/mode/s/debug/production/' exemple.txtCette idée est centrale : une adresse limite l’action, puis la commande s’applique uniquement aux lignes sélectionnées.
Remplacer du texte simplement avec s

La commande la plus utilisée dans
sedests. C’est elle qui permet de remplacer du texte.Exemple simple :
bashsed 's/web01/app01/' exemple.txtLe fichier d’origine ne change pas. Le résultat modifié est seulement affiché dans le terminal.
Par défaut,
sedremplace la première occurrence trouvée sur chaque ligne. Cette précision devient importante si une même ligne contient plusieurs fois le même motif.Regardez cet exemple avec une entrée temporaire :
bashprintf 'test test test\n' | sed 's/test/demo/'Résultat :
bashdemo test testSeule la première occurrence de la ligne a été remplacée. Pour toutes les remplacer, il faut ajouter l’indicateur global
g:bashprintf 'test test test\n' | sed 's/test/demo/g'Résultat :
bashdemo demo demoRetenez donc cette différence :
s/motif/remplacement/: première occurrence par lignes/motif/remplacement/g: toutes les occurrences par ligne
Cibler une ligne précise ou une plage de lignes
Une force de
sedest de pouvoir remplacer du texte seulement à certains endroits du fichier.Pour remplacer sur une ligne précise, placez le numéro de ligne avant la commande :
bashsed '2s/8080/9090/' exemple.txtIci, seule la ligne 2 est concernée.
Pour travailler sur une plage de lignes :
bashsed '1,3s/web/service/' exemple.txtCette commande tente le remplacement seulement entre les lignes 1 et 3.
Vous pouvez aussi cibler par motif de début et motif de fin. Par exemple :
bashsed '/^serveur=/,/^mode=/s/web/node/' exemple.txtCette écriture applique le remplacement entre la première ligne qui correspond à
^serveur=et la ligne qui correspond à^mode=.Les caractères
^et$sont utiles :^représente le début de ligne,$la fin de ligne. Par exemple, pour remplacer uniquement une ligne dont la valeur entière estmode=debug:bashsed 's/^mode=debug$/mode=production/' exemple.txtCette précision évite des remplacements involontaires dans des lignes plus longues.
Utiliser des délimiteurs adaptés
Dans beaucoup d’exemples, le séparateur de la commande
sest la barre oblique/. Pourtant, ce n’est pas une obligation. Quand le motif ou le remplacement contient déjà des/, choisir un autre délimiteur rend la commande plus lisible.Supposons que vous vouliez remplacer
/api/v1par/api/v2. Vous pouvez écrire :bashsed 's#/api/v1#/api/v2#' exemple.txtLe caractère
#joue ici le rôle de séparateur. Le principe est identique.Autre exemple avec une URL plus longue :
bashprintf 'url=/var/www/site\n' | sed 's#/var/www#/srv/www#'Cette technique réduit fortement le besoin d’échapper les barres obliques. Quand vous débutez, c’est souvent la manière la plus confortable d’écrire des remplacements impliquant des chemins ou des URL.
Découvrir les expressions régulières les plus utiles pour débuter

sedsait travailler avec des motifs plus souples que du texte strictement littéral. Sans entrer dans tous les détails, quelques bases suffisent pour commencer efficacement..: n’importe quel caractère simple*: répétition de l’élément précédent, zéro fois ou plus^: début de ligne$: fin de ligne[0-9]: un chiffre[a-z]: une lettre minuscule parmi l’intervalle indiqué
Exemple pour remplacer le port, quel que soit son nombre exact, si la ligne suit le format
port=nombre:bashsed 's/^port=[0-9][0-9]*/port=9090/' exemple.txtIci,
[0-9]désigne un chiffre, et[0-9]*permet d’en avoir plusieurs.Autre exemple : afficher uniquement les lignes qui commencent par une lettre minuscule :
bashsed -n '/^[a-z]/p' exemple.txtSi vous voulez travailler sur des motifs littéraux contenant des caractères spéciaux, il faut parfois les échapper avec une barre oblique inverse
\. Par exemple, un point.représente normalement un caractère quelconque. Pour chercher un vrai point, on l’écrit souvent ainsi :bashsed -n '/example\.com/p' exemple.txtCe type de détail compte surtout quand vous manipulez des noms de domaine, des extensions de fichiers ou des chaînes contenant des caractères interprétés par les expressions régulières.
Réutiliser une partie du texte trouvé
Au-delà du remplacement simple,
sedpeut réutiliser une partie de ce qu’il a trouvé. Pour débuter, cela permet déjà de restructurer des lignes.Prenons une ligne au format
clé=valeur. On peut inverser l’ordre de façon simple :bashprintf 'mode=debug\n' | sed 's/^\([a-z]*\)=\(.*\)$/\2 (\1)/'Résultat :
bashdebug (mode)Dans cet exemple :
\( ... \)capture une partie du motif\1réutilise la première partie capturée\2réutilise la deuxième
Vous n’avez pas besoin de maîtriser toutes les expressions régulières pour utiliser cette idée. Retenez simplement qu’on peut entourer des morceaux pour les récupérer dans le remplacement.
Autre exemple utile, reformater une ligne
serveur=web01:bashsed 's/^serveur=\(.*\)$/hote: \1/' exemple.txtCette commande transforme seulement les lignes qui commencent par
serveur=.Modifier un fichier en place avec prudence
Jusqu’ici, les commandes affichent un résultat sans changer le fichier source. Pour écrire les modifications directement dans le fichier, on utilise l’option
-i.bashsed -i 's/debug/production/' exemple.txtAprès cette commande, le contenu de
exemple.txtest modifié sur le disque. Vérifiez-le :bashcat exemple.txtCette opération est pratique, mais elle mérite une habitude de sécurité : créer une sauvegarde avant ou pendant la modification. Une méthode simple consiste à copier le fichier avant :
bashcp exemple.txt exemple.txt.bakEnsuite, appliquez la commande :
bashsed -i 's/production/debug/' exemple.txtQuand vous débutez, préférez ce déroulé :
- Tester sans
-i - Vérifier la sortie
- Créer une sauvegarde
- Relancer avec
-i
Cette méthode limite les erreurs sur les fichiers de configuration ou les scripts.
- Tester sans
Enregistrer le résultat dans un autre fichier
Si vous ne voulez pas modifier le fichier original, vous pouvez rediriger la sortie vers un nouveau fichier :
bashsed 's/web/node/g' exemple.txt > exemple.modifie.txtEnsuite, comparez si besoin :
bashcat exemple.modifie.txtCette approche est très utile dans les scripts ou quand vous voulez générer une nouvelle version d’un fichier à partir d’un modèle. Elle garde toujours une séparation claire entre l’entrée et la sortie.
Vous pouvez aussi utiliser un fichier temporaire, vérifier le résultat, puis remplacer l’ancien fichier vous-même si tout est correct. Même si cela demande une commande supplémentaire, cette pratique reste très rassurante quand les données sont importantes.
Supprimer ou afficher certaines lignes
sedne sert pas seulement à remplacer. Il peut aussi supprimer des lignes ou n’en afficher qu’une partie.Pour supprimer une ligne précise de l’affichage :
bashsed '3d' exemple.txtLa commande
dsignifie delete. Le fichier n’est pas modifié tant que vous n’utilisez pas l’édition en place ou une redirection vers un autre fichier.Pour supprimer les lignes vides d’une entrée :
bashsed '/^$/d' fichier.txtPour supprimer les lignes contenant un motif :
bashsed '/debug/d' exemple.txtInversement, avec
-netp, vous pouvez filtrer et n’afficher que ce qui vous intéresse :bashsed -n '/^serveur=/p' exemple.txtCe n’est pas l’usage principal demandé par le sujet, mais ces commandes complètent naturellement l’apprentissage de la recherche et de la modification en ligne de commande.
Ajouter un indicateur de confirmation visuelle
Quand vous testez un remplacement, il peut être utile de n’afficher que les lignes effectivement modifiées. Une manière simple est d’associer l’option
-n, la commande de substitution et l’indicateurpà la fin de la substitution :bashsed -n 's/web/node/p' exemple.txtIci, seules les lignes où le remplacement a réussi sont affichées.
C’est très pratique pour valider un motif avant d’utiliser
-i. Vous voyez immédiatement quelles lignes seront touchées, sans être noyé dans le reste du fichier.Vous pouvez aussi utiliser cette idée sur une ligne ciblée :
bashsed -n '/^serveur=/s/web/node/p' exemple.txtDans un flux de travail prudent, cette technique fait partie des meilleurs réflexes pour éviter une modification trop large.
Chaîner plusieurs opérations simples
Il est possible d’enchaîner plusieurs commandes
seddans un même appel. Pour débuter, la forme la plus lisible consiste à utiliser plusieurs options-e.bashsed -e 's/debug/production/' -e 's/web/node/g' exemple.txtCette commande effectue deux remplacements successifs sur le même flux.
Autre exemple, supprimer une ligne puis modifier une autre :
bashsed -e '/^email=/d' -e 's/^port=8080$/port=9090/' exemple.txtLe chaînage est utile quand une seule transformation ne suffit pas. Toutefois, pour apprendre correctement, il vaut mieux commencer par une commande à la fois, vérifier le résultat, puis combiner ensuite seulement les opérations stables et bien comprises.
Bien gérer les guillemets dans le shell
Beaucoup d’erreurs avec
sedne viennent pas desedlui-même, mais du shell. En pratique, on entoure très souvent le scriptsedavec des guillemets simples :bashsed 's/ancien/nouveau/' fichier.txtCette habitude évite que le shell interprète certains caractères spéciaux avant
sed.Les guillemets doubles peuvent être utiles si vous voulez insérer la valeur d’une variable shell, mais ils demandent plus d’attention. Exemple :
bashancien='debug' nouveau='production' sed "s/$ancien/$nouveau/" exemple.txtQuand vous débutez, gardez une règle simple :
- Sans variable shell : préférez les guillemets simples
- Avec variable shell : utilisez les guillemets doubles en vérifiant soigneusement le contenu
Si une commande se comporte de façon étrange, vérifiez toujours d’abord les guillemets, les espaces et les caractères spéciaux présents dans le motif ou dans le remplacement.
Construire une méthode de travail sûre
Pour terminer la partie pratique, voici une méthode simple et fiable que vous pouvez appliquer presque à chaque fois :
- Afficher les lignes concernées avec
sed -n '/motif/p' - Tester le remplacement sans
-i - Si besoin, n’afficher que les lignes réellement modifiées avec
-netp - Créer une sauvegarde du fichier
- Appliquer la modification en place ou écrire le résultat dans un nouveau fichier
- Vérifier le contenu final avec
cat,grepouless
Exemple complet :
bashsed -n '/^mode=/p' exemple.txt sed -n 's/^mode=debug$/mode=production/p' exemple.txt cp exemple.txt exemple.txt.bak sed -i 's/^mode=debug$/mode=production/' exemple.txt cat exemple.txtCette séquence est simple, répétable et adaptée à des fichiers de configuration modestes, à des scripts ou à des fichiers texte utilisés au quotidien.
- Afficher les lignes concernées avec
Erreurs fréquentes & dépannage
- Oublier que
sedn’écrit pas dans le fichier par défaut : sans-ini redirection, le résultat est seulement affiché dans le terminal. - Utiliser
-itrop tôt : testez toujours la commande sans modification en place avant de l’appliquer au vrai fichier. - Confondre première occurrence et toutes les occurrences : sans
g, seule la première occurrence par ligne est remplacée. - Choisir un mauvais délimiteur : si votre motif contient beaucoup de
/, utilisez par exemple#pour rendre la commande plus lisible. - Mal gérer les caractères spéciaux : un point
.n’est pas un point littéral, il représente un caractère quelconque dans un motif. - Oublier les ancres
^et$: sans elles, un remplacement peut toucher plus de lignes que prévu. - Se tromper dans les guillemets : les guillemets simples sont souvent le choix le plus sûr pour écrire une commande
sed.
Astuces & pour aller plus loin
- Commencez par
sed -n '/motif/p' fichierpour visualiser les lignes ciblées avant toute modification. - Utilisez
sed -n 's/motif/remplacement/p' fichierpour n’afficher que les lignes réellement modifiées. - Quand vous remplacez des chemins ou des URL, préférez un autre séparateur que
/, par exemple#. - Faites une copie du fichier avant toute édition en place :
cp fichier fichier.bak. - Écrivez d’abord une commande simple et correcte, puis ajoutez progressivement les conditions, plages de lignes ou indicateurs comme
g.
Questions fréquentes
Quelle différence entre sed et grep ?
Dans ce tutoriel, sed est utilisé pour rechercher des lignes mais surtout pour transformer du texte, par exemple avec des remplacements. grep est plutôt employé pour filtrer et afficher les lignes qui correspondent à un motif.
Est-ce que sed modifie toujours le fichier ?
Non. Par défaut, sed affiche le résultat sur la sortie standard. Pour modifier un fichier sur le disque, il faut utiliser l’édition en place avec -i ou rediriger la sortie vers un autre fichier.
Pourquoi mon remplacement ne change que la première occurrence ?
Parce que la commande s/motif/remplacement/ remplace seulement la première occurrence trouvée sur chaque ligne. Ajoutez g à la fin pour remplacer toutes les occurrences de la ligne.
Comment remplacer un chemin contenant des / ?
Vous pouvez utiliser un autre délimiteur que la barre oblique. Par exemple : sed 's#/ancien/chemin#/nouveau/chemin#' fichier.txt. Cela rend la commande plus lisible.
Comment tester une commande sans risque ?
Exécutez d’abord la commande sans -i pour afficher le résultat dans le terminal. Vous pouvez aussi n’afficher que les lignes touchées avec sed -n 's/motif/remplacement/p' fichier, puis créer une sauvegarde avant la modification réelle.
Peut-on cibler seulement certaines lignes ?
Oui. Vous pouvez utiliser un numéro de ligne, une plage comme 2,4, ou un motif comme /serveur/ pour limiter l’action de sed.
Conclusion
sed est un excellent point d’entrée vers le traitement de texte en ligne de commande. Avec quelques commandes seulement, vous savez déjà afficher des lignes ciblées, rechercher des motifs, remplacer du texte, limiter l’action à certaines lignes et enregistrer le résultat dans un nouveau fichier ou directement dans le fichier source.
Pour progresser sans vous perdre, gardez une approche simple : observez d’abord les lignes concernées, testez ensuite le remplacement sans -i, puis appliquez la modification finale seulement après vérification et sauvegarde. Cette discipline rend sed à la fois puissant et sûr, même pour débuter.
Une fois ces bases acquises, vous pourrez aller plus loin avec des expressions régulières plus riches, des scripts sed plus longs ou l’intégration dans vos scripts shell. Mais pour un usage quotidien, les commandes vues ici couvrent déjà une grande partie des besoins les plus fréquents.