CodeGym /Cours /Docker SELF /Transformation de texte avec sed

Transformation de texte avec sed

Docker SELF
Niveau 8 , Leçon 1
Disponible

Transformation de texte avec sed

1. Syntaxe de la commande sed

Qu'est-ce que sed ?

sed (abréviation de Stream Editor, c'est-à-dire éditeur de flux) — c'est un outil puissant pour manipuler du texte qui permet de modifier, ajouter, supprimer ou transformer des lignes dans des fichiers texte et des flux de données.

La vraie magie de sed, c'est qu'il modifie le texte « à la volée », sans toucher au fichier original (sauf si tu lui demandes expressément). Cela en fait un outil idéal pour des transformations de données rapides et automatisées.

La syntaxe principale de la commande

Prenons la formule de base pour travailler avec sed :

sed [options] 'modèle/action' fichier

Où :

  • modèle — c'est le texte ou l'expression régulière que tu veux rechercher.
  • action — l'opération que tu veux effectuer (par exemple, remplacer du texte).
  • fichier — le fichier texte contenant les lignes que tu veux changer.

Pour simplifier au début, on va se concentrer sur les actions les plus populaires : remplacer du texte (s — pour "substitute") et supprimer des lignes (d — pour "delete").


2. Remplacement de texte s/ancien/nouveau/

Exemple 1 : Remplacement basique de texte

Imaginons qu'on ait un fichier example.txt avec le contenu suivant :

Hello world!
Welcome to Linux.
Linux is awesome.

Essayons de remplacer le mot "Linux" par sed :

sed 's/Linux/sed/' example.txt

Le résultat sera :

Hello world!
Welcome to sed.
sed is awesome.

Et voilà. Le mot "Linux" a été remplacé par sed une seule fois dans chaque ligne. C'est le comportement par défaut.


Exemple 2 : Remplacement global

Si tu veux remplacer toutes les occurrences du mot, au lieu de la première dans une ligne, ajoute l'option g (global) :

sed 's/Linux/sed/g' example.txt

Si une ligne contient plusieurs mentions de "Linux", elles seront toutes remplacées par sed.


Exemple 3 : Ignorer les majuscules/minuscules

Pour remplacer du texte sans tenir compte de la casse, ajoute l'option I (ou i selon ta version) :

sed 's/linux/sed/gi' example.txt

Cela remplacera les mots "Linux", "LINUX", "LiNuX", etc.


Exemple 4 : Remplacement avec sauvegarde

Par défaut, sed affiche juste le résultat dans la console, sans modifier le fichier. Si tu veux enregistrer les changements directement dans le fichier, ajoute l'option -i (in-place) :

sed -i 's/Linux/sed/g' example.txt

Maintenant, le fichier example.txt sera mis à jour avec les remplacements.


3. Suppression de lignes /pattern/d

Exemple 1 : Suppression de lignes en fonction d'un modèle

Si tu veux supprimer toutes les lignes contenant le mot "Linux" :

sed '/Linux/d' example.txt

La sortie sera :

Hello world!

Les lignes contenant "Linux" ont été supprimées ici.


Suppression de lignes par numéro

Tu peux supprimer une ligne en fonction de son numéro. Par exemple, pour supprimer la deuxième ligne, fais :

sed '2d' example.txt

Sortie :

Hello world!
Linux is awesome.

Pour supprimer plusieurs lignes : spécifie une plage. Par exemple, pour supprimer les lignes de la 2e à la 3e :

sed '2,3d' example.txt

4. Travailler avec les expressions régulières

C'est là que sed montre toute sa puissance ! Dans les modèles, on peut utiliser des expressions régulières pour rechercher des correspondances plus complexes.

Exemple 1 : Remplacer les mots avec un modèle spécifique

Supposons que dans le texte il y ait les lignes suivantes :

error: something went wrong
warning: check your system
error: unable to connect

On veut remplacer toutes les lignes qui commencent par "error" par "Issue Detected". Les expressions régulières nous aident ici :

sed 's/^error:.*/Issue Detected/' logs.txt

Où :

  • ^ — indique le début de la ligne.
  • .* — signifie "tout ce qui suit".

Résultat :

Issue Detected
warning: check your system
Issue Detected

5. Insérer et ajouter des lignes

Insérer une ligne avant une correspondance

Pour insérer une ligne avant chaque ligne contenant "Linux" :

sed '/Linux/i\# Apprendre, c'est amusant' example.txt

Résultat :

Hello world!
Welcome to Linux.
# Apprendre, c'est amusant
Linux is awesome.

Exemple 2 : Ajouter une ligne après une correspondance

Pour ajouter du texte après une ligne correspondant au modèle :

sed '/Linux/a\# sed le rend plus facile' example.txt

Résultat :

Hello world!
Welcome to Linux.
# sed le rend plus facile
Linux is awesome.
# sed le rend plus facile

6. Pratique : traitement des fichiers de configuration

Essayons de résoudre un problème pratique. Imagine que tu as un fichier de configuration config.txt :

host=localhost
port=8080
mode=production
logfile=/var/log/app.log

Tâche 1 : Remplacer "localhost" par "127.0.0.1"

sed -i 's/localhost/127.0.0.1/' config.txt

Résultat :

host=127.0.0.1
port=8080
mode=production
logfile=/var/log/app.log

Tâche 2 : Augmenter le port de 1

Pour cela, on utilise sed avec un petit trick :

sed -i 's/port=8080/port=8081/' config.txt

Résultat :

host=127.0.0.1
port=8081
mode=production
logfile=/var/log/app.log

Tâche 3 : Supprimer les lignes avec logfile

Si la configuration n'a plus besoin de logs, on supprime la ligne :

sed -i '/logfile/d' config.txt

Résultat :

host=127.0.0.1
port=8081
mode=production

7. Combinaison avec d'autres commandes

sed marche super bien en tandem avec d'autres outils Linux. Par exemple :

grep "error" logs.txt | sed 's/error/ERROR/'

Ici, on commence par chercher les lignes contenant des erreurs, puis on les formate.

Erreurs courantes et comment les éviter

  • Erreur : oublié l'option -i. Les débutants s'attendent souvent à ce que sed modifie un fichier directement, mais ils oublient de mettre -i. Pense toujours à l'ajouter explicitement si tu veux modifier un fichier.
  • Erreur : les guillemets. Sur certains systèmes, surtout si tu utilises des guillemets simples, \ devant des caractères spéciaux peut mal fonctionner. Assure-toi de toujours échapper correctement les caractères.
  • Erreur avec les plages de lignes. Si tu utilises des plages (par exemple, 2,3d), vérifie qu'elles sont correctement définies — le fichier ne doit pas être vide.
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION