Édition de flux avec sed

LinuxBeginner
Pratiquer maintenant

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 à :

  1. Supprimer des lignes (d) : retirer des en-têtes ou des commentaires indésirables.
  2. Supprimer les lignes vides : utiliser des expressions régulières pour filtrer les lignes vides.
  3. Insérer du texte (i) : ajouter de nouvelles lignes au fichier.
  4. 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.

  • 1d supprime la ligne 1.
  • 1,2d supprime 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 Text insère « Text » avant la ligne 1.

La commande a (Append) ajoute du texte après la ligne indiquée.

  • 1a Text insè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 :

  1. Utilisez l’option -n pour désactiver l’affichage automatique.
  2. Utilisez la commande p pour 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 :

  1. Suppression (d) : supprimer des lignes précises (1,2d) ou des lignes correspondant à un motif (/^$/d).
  2. Insertion (i) : ajouter du texte dans le flux du fichier à des emplacements précis.
  3. Affichage (-n ... p) : désactiver la sortie par défaut et afficher uniquement les lignes sélectionnées.
  4. 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.