Introduction
Lorsque vous travaillez avec des fichiers texte sous Linux, vous devez souvent effectuer des modifications automatisées sans ouvrir d’éditeur de texte interactif. Par exemple, vous pouvez avoir besoin de supprimer l’en-tête d’un fichier CSV, d’effacer les lignes vides ou d’extraire une plage précise de lignes d’un fichier journal.
Pour ces tâches, nous utilisons sed (éditeur de flux).
sed est un éditeur de texte non interactif puissant. Il lit l’entrée depuis un fichier ou un tube, effectue des opérations sur chaque ligne, puis affiche le résultat. Ce modèle « lire, transformer, afficher » est une approche Unix classique qui fonctionne particulièrement bien dans les pipelines.
Ce modèle explique le nom éditeur de flux. sed est conçu pour traiter du texte qui défile, et pas uniquement des fichiers ouverts dans un éditeur plein écran. C’est pourquoi il s’intègre si naturellement aux pipelines shell et aux scripts d’automatisation.
Dans ce laboratoire, vous apprendrez à :
- Supprimer des lignes (
d) : retirer des en-têtes ou des commentaires indésirables. - Supprimer les lignes vides : utiliser des expressions régulières pour filtrer les lignes vides.
- Insérer du texte (
i) : ajouter de nouvelles lignes au fichier. - Afficher des lignes (
p) : extraire des plages de lignes précises.
Supprimer des lignes
Commencez par examiner notre fichier d’exemple.
cat /home/labex/project/data.csv
Vous constaterez qu’il contient en haut deux lignes de commentaire qui commencent par #. Nous voulons supprimer ces lignes.
Pour supprimer des lignes avec sed, utilisez la commande d.
1dsupprime la ligne 1.1,2dsupprime les lignes 1 à 2.
L’adressage des lignes par leur numéro est l’un des principes de base de sed. Une adresse indique à sed à quelle ligne ou plage de lignes une commande doit s’appliquer, tandis que la commande de modification indique l’opération à effectuer.
Exécutez la commande suivante pour prévisualiser la suppression, sans modifier le fichier :
sed '1,2d' data.csv
La sortie affiche le contenu du fichier sans les deux premières lignes. Vérifiez toutefois à nouveau le contenu du fichier :
cat data.csv
Les lignes sont toujours présentes. Par défaut, sed envoie la sortie vers l’écran (la sortie standard) et ne modifie pas le fichier d’origine. Il s’agit d’une mesure de sécurité.
Pour appliquer les modifications au fichier, c’est-à-dire le modifier « sur place », utilisez l’option -i :
sed -i '1,2d' data.csv
Vérifiez les modifications :
cat data.csv
Les lignes d’en-tête ont maintenant été supprimées définitivement.
Supprimer les lignes vides
Notre fichier contient encore des lignes vides qui perturbent la structure des données. Dans les fichiers de données traités, nous n’en avons généralement pas besoin.
Pour les supprimer, combinez la commande de suppression (d) avec une expression régulière (Regex).
^correspond au début d’une ligne.$correspond à la fin d’une ligne.^$correspond à une ligne qui commence et se termine immédiatement, c’est-à-dire une ligne vide.
Cet exemple montre bien comment sed combine deux niveaux : un motif d’adressage et une action de modification. Le motif /^$/ sélectionne les lignes correspondantes, et d supprime ces lignes sélectionnées.
La commande /^$/d indique à sed de « supprimer toute ligne qui correspond au motif d’une ligne vide ».
Exécutez la commande pour supprimer les lignes vides directement dans le fichier :
sed -i '/^$/d' data.csv
Vérifiez le résultat :
cat data.csv
Le fichier devrait maintenant être une liste compacte de données, sans espaces vides.
Insérer du texte
Maintenant que les commentaires inutiles ont disparu, supposons que vous vouliez ajouter un en-tête de classification approprié au fichier.
La commande i (Insert) ajoute du texte avant la ligne indiquée.
1i Textinsère « Text » avant la ligne 1.
La commande a (Append) ajoute du texte après la ligne indiquée.
1a Textinsère « Text » après la ligne 1.
Avec la suppression et le remplacement, des commandes comme i et a montrent que sed ne se limite pas à remplacer du texte. Il peut remodeler le flux en supprimant, en ajoutant et en sélectionnant des lignes au fur et à mesure de leur traitement.
Exécutez la commande suivante pour insérer « Company Confidential » tout en haut du fichier :
sed -i '1i Company Confidential' data.csv
Vérifiez le contenu du fichier :
cat data.csv
La nouvelle ligne a été insérée au début et toutes les autres lignes ont été décalées vers le bas.
Afficher des lignes précises
Parfois, vous ne voulez pas modifier le fichier : vous souhaitez seulement en extraire certaines lignes. sed peut alors jouer le rôle d’une version plus flexible de head ou de tail.
Par défaut, sed affiche chaque ligne qu’il traite. Pour n’afficher que certaines lignes :
- Utilisez l’option
-npour désactiver l’affichage automatique. - Utilisez la commande
ppour afficher explicitement les lignes voulues.
Sans -n, sed afficherait automatiquement toutes les lignes, puis afficherait une seconde fois les lignes sélectionnées lors de l’exécution de p, ce qui déroute souvent les débutants. L’option -n désactive le comportement par défaut afin que la commande affiche uniquement ce que vous avez demandé.
Pour afficher les lignes 5 à 10 :
sed -n '5,10p' data.csv
Pour afficher uniquement la dernière ligne, utilisez le symbole $ pour représenter la fin du fichier :
sed -n '$p' data.csv
Cette fonction est particulièrement utile pour analyser de gros fichiers journaux lorsque vous ne devez consulter qu’une section précise.
Résumé
Dans ce laboratoire, vous avez découvert les bases de l’édition de flux avec sed :
- Suppression (
d) : supprimer des lignes précises (1,2d) ou des lignes correspondant à un motif (/^$/d). - Insertion (
i) : ajouter du texte dans le flux du fichier à des emplacements précis. - Affichage (
-n ... p) : désactiver la sortie par défaut et afficher uniquement les lignes sélectionnées. - Modification sur place (
-i) : modifier directement le fichier au lieu de simplement afficher le résultat à l’écran.
sed est un outil essentiel pour le traitement automatisé du texte. Il est largement utilisé dans les scripts shell pour la gestion de la configuration et l’analyse des fichiers journaux.



