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 quesed
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.
GO TO FULL VERSION