Apprenez en lisant dans l'ordre

sed — Substitution et extraction

Pratique sed : 's/a/X/' remplace la première occurrence par ligne et g remplace tout, -n '2p' affiche une ligne précise, '/two/d' supprime les lignes correspondantes, et -i modifie un fichier en place — illustré et en pratique dans un terminal navigateur.

Remplacer du texte — s/old/new/ et g

sed est un éditeur de flux : il lit l'entrée ligne par ligne, la transforme selon les règles que tu lui donnes, et écrit le résultat. L'usage le plus courant est la substitution, écrite sous la forme sed 's/old/new/'. s signifie substitution, / sépare les parties, et il remplace old par new. La partie old accepte aussi les expressions régulières vues précédemment (^ $ . *).

Sans g en fin de motif, s/old/new/ remplace uniquement la première occurrence trouvée sur chaque ligne. En ajoutant g à la fin comme dans s/old/new/g, on remplace toutes les occurrences sur la ligne.

FormeSignificationExemple
s/old/new/Remplace uniquement la première occurrence par lignesed 's/a/X/' f
s/old/new/gRemplace toutes les occurrences sur la lignesed 's/a/X/g' f
Substitution s vs le drapeau g
sed 's/a/X/' f1er a par ligne -> X(autres inchangés)sed 's/a/X/g' ftous les ade la ligne -> X
Sans g, seule la première occurrence par ligne est modifiée ; avec g, toutes les occurrences de la ligne sont remplacées.
printf 'aaa\nbbb\n' > s.txt   # créer le fichier source
sed 's/a/X/' s.txt             # only the first a -> Xaa
sed 's/a/X/g' s.txt            # every a -> XXX

① Crée un fichier source de deux lignes avec printf 'aaa\nbbb\n' > s.txt.

② Exécute la substitution sed de base qui transforme a en X, et vérifie que seul le premier caractère de chaque ligne est remplacé.

③ Puis exécute la forme avec le drapeau en fin de motif qui substitue sur toute la ligne, et vérifie que chaque a devient X. (Si tu l'exécutes correctement, une explication s'affichera.)

Linux console
0 / 3 exécutée(s)
Loading Linux Terminal...

Extraire et supprimer des lignes — -n 'Np' et /pat/d

sed -n 'Np' affiche uniquement la ligne N. Tu indiques le numéro de ligne souhaité à la place de N (pour la ligne 2, 2p). Puisque sed affiche toutes les lignes par défaut, -n désactive cet affichage automatique, et p (print) indique explicitement la ligne à afficher. Ainsi sed -n '2p' ne produit que la deuxième ligne.

sed '/pat/d' supprime les lignes correspondant à pat et affiche le reste. d signifie delete (supprimer), et la partie /pat/ est la condition qui sélectionne les lignes à retirer. Utilise-le quand tu veux éliminer uniquement les lignes contenant un certain mot et voir le reste.

FormeSignificationExemple
-n 'Np'Afficher uniquement la ligne Nsed -n '2p' f
/pat/dSupprimer les lignes correspondant à patsed '/two/d' f
Extraction -n p vs suppression /pat/d
sed -n '2p' faffiche ligne 2(les autres ignorées)sed '/two/d' fsupprime ligne two,garde le reste
-n 'Np' extrait uniquement la ligne spécifiée, tandis que /pat/d affiche tout sauf les lignes correspondantes.
printf 'one\ntwo\nthree\n' > lines.txt   # créer le fichier source
sed -n '2p' lines.txt                      # only line 2, two
sed '/two/d' lines.txt                     # one and three, without the two line

① Crée un fichier source de trois lignes avec printf 'one\ntwo\nthree\n' > lines.txt.

② Combine l'option qui désactive l'affichage automatique avec la directive qui affiche un numéro de ligne précis, et utilise sed pour n'afficher que la deuxième ligne.

③ Puis utilise la directive qui supprime les lignes correspondantes pour afficher le reste avec la ligne contenant two retirée.

Linux console
0 / 3 exécutée(s)
Loading Linux Terminal...

Modifier un fichier en place — sed -i

Jusqu'ici, sed se contentait d'afficher les résultats à l'écran sans modifier le fichier original. En ajoutant sed -i, on modifie le fichier directement avec le résultat. C'est pratique pour des remplacements en masse dans des fichiers de configuration, mais comme le contenu original n'est pas conservé, après la réécriture, utilise cat pour vérifier le contenu.

FormeSignificationExemple
-iModifier le fichier en placesed -i 's/a/Z/' f
sed -i modifie le fichier, pas l'écran
sed 's/a/Z/' frésultat affiché(f inchangé)sed -i 's/a/Z/' ff lui-mêmeest réécrit
Sans -i, seul l'affichage à l'écran est produit ; avec -i, le fichier lui-même est réécrit.

sed -i est irréversible

sed -i réécrit le fichier en place et ne conserve pas le contenu original. Avant de l'utiliser sur un vrai fichier de configuration, l'approche sûre est de l'exécuter d'abord sans -i, de vérifier le résultat à l'écran, de confirmer que c'est bien ce que tu veux, puis seulement d'ajouter -i.

printf 'apple\nbanana\n' > fruit.txt   # créer le fichier source
sed -i 's/apple/cherry/' fruit.txt      # edit the file in place
cat fruit.txt                            # check cherry and banana

① Crée un fichier source de deux lignes avec printf 'apple\nbanana\n' > fruit.txt.

② En utilisant la substitution sed avec l'option qui modifie le fichier en place, change apple en cherry.

③ Exécute cat fruit.txt et vérifie que le fichier lui-même a été réécrit avec cherry et banana.

Linux console
0 / 3 exécutée(s)
Loading Linux Terminal...
QUIZ

Vérification des connaissances

Répondez à chaque question une par une.

Question 1Comment sed 's/a/X/' f se comporte-t-il sur chaque ligne ?

Question 2Qu'affiche l'exécution de sed -n '2p' f ?

Question 3Que fait le -i dans sed -i 's/a/Z/' f ?