Comment utiliser Sed sous Linux

Comment utiliser Sed sous Linux
Une photographie de deux écrans d’ordinateur affichant une grande quantité de code.

Sed est un programme UNIX simple qui ne crée ni ne modifie de fichiers. Il modifie uniquement les données qui transitent par son entrée et présente les données modifiées sur sa sortie. Ici, nous examinons un bref aperçu de la philosophie UNIX, passons en revue les bases de l’utilisation de sed, et vous montrons des exemples d’utilisation du programme pour les tâches quotidiennes.

Les bases de l’utilisation de Sed

Sed est un programme qui peut lire et modifier des flux de données texte. Cela signifie que, contrairement à un éditeur de texte classique, sed ne modifie pas directement les fichiers de votre ordinateur. Au lieu de cela, il agit davantage comme un « filtre » pour les données entrantes et vous permet de les transformer comme vous le souhaitez.

Pour commencer à utiliser sed, créez d’abord un fichier contenant au moins cinq lignes de texte. Assurez-vous qu’il y a un caractère de « nouvelle ligne » entre vos lignes :

La commande générale pour sed ressemble à ceci :

L’une des fonctions les plus basiques de sed est la nsous-commande. Elle fonctionne en lisant les données de l’entrée de sed et en les plaçant dans « l’espace de motif » de votre programme. Il s’agit d’un tampon spécial qui conserve tout texte entrant avant que sed ne le manipule :

Un terminal affichant le contenu du

Une autre fonction de base de sed est la psous-commande. Similaire à n, elle lit les données provenant de l’entrée de sed et les place dans l’espace de motifs du programme. Cependant, elle l’imprime aussi explicitement sur la sortie de votre terminal.

L’utilisation de la psous-commande peut être déroutante pour les débutants, car son exécution avec n’importe quelle entrée de texte entraîne l’impression de sa sortie par sed deux fois. En effet, par défaut, sed imprime automatiquement son espace de motif, qu’il soit pprésent ou non :

Un terminal affichant la sortie de la sous-commande p sans l'indicateur -n.

Pour désactiver ce comportement étrange, ajoutez l’ -nindicateur avant d’exécuter vos sous-commandes sed :

Un terminal affichant la sortie de la sous-commande p avec l'indicateur -n activé.

Une fois les bases posées, les sections suivantes examineront les différentes manières dont vous pouvez utiliser sed pour manipuler des données texte.

1. Sélection et découpage des flux de texte

Outre l’impression, vous pouvez également utiliser sed pour sélectionner et découper du texte à partir de flux de données et de fichiers. Le moyen le plus simple de procéder consiste à ajouter une valeur de plage à la psous-commande.

La commande suivante utilise la syntaxe de plage de sed pour imprimer la troisième à la cinquième ligne de votre fichier « hello.txt » :

Un terminal montrant la capacité de sed à imprimer des plages de lignes spécifiques.

Vous pouvez également utiliser la psous-commande pour imprimer des lignes non adjacentes dans votre texte. Par exemple, la commande suivante imprime la première et la quatrième ligne du fichier « hello.txt » :

Un terminal montrant sed imprimant des lignes non adjacentes à partir d'un fichier texte.

2. Suppression de texte d’un flux Sed

Sed peut également supprimer des données de tout flux de texte entrant. Cela est utile si vous souhaitez supprimer quelques lignes de texte d’un fichier volumineux ou nettoyer la sortie d’un programme pour n’afficher que les informations dont vous avez besoin.

Pour ce faire, utilisez la dsous-commande avec la ligne ou la plage spécifique que vous souhaitez supprimer :

Un terminal montrant le processus de suppression des lignes non adjacentes à l'aide de sed.

Similairement à l’impression de lignes de texte, la dsous-commande fonctionne avec des plages de plusieurs lignes. Par exemple, la commande suivante supprimera les quatre premières lignes du fichier « hello.txt » :

Un terminal montrant le processus de suppression d'une plage de lignes à l'aide de sed.

En plus de faire correspondre des plages de lignes spécifiques, vous pouvez utiliser des expressions régulières pour trouver le texte que vous souhaitez supprimer. Cela indiquera à sed de rechercher toutes les lignes contenant le mot « world » et de les supprimer :

Vous pouvez également traiter les expressions régulières comme une plage pour votre fichier d’entrée. Cela vous donne plus de flexibilité dans la définition de vos sélections au sein du programme :

Un terminal montrant la capacité de sed à supprimer des lignes de texte en fonction d'un modèle regex.

3. Ajout d’un nouveau texte à un flux Sed

En plus de supprimer du texte, sed est également capable d’ajouter du nouveau texte aux flux de données existants. Bien qu’il ne soit pas au niveau d’un éditeur de texte complet, cette fonctionnalité peut néanmoins être utile pour les modifications ponctuelles et les ajouts de texte de base.

Pour ajouter une nouvelle ligne de texte, exécutez sed avec la acommande suivie du texte que vous souhaitez ajouter :

Un terminal montrant le processus d'ajout d'une seule ligne de texte à la fin d'un flux sed.

Il est également possible d’inclure des fichiers entiers dans un flux texte sed. Pour ce faire, utilisez la rcommande suivie du nom du fichier que vous souhaitez ajouter :

Un terminal montrant le processus d'ajout d'un fichier entier à la fin d'un flux sed.

4. Recherche et remplacement de texte dans Sed

L’une des fonctionnalités les plus puissantes de sed est sa capacité à rechercher et à remplacer du texte à partir d’un flux de texte. Contrairement à l’ajout et à la suppression de texte, cela vous permet de modifier dynamiquement les données lorsqu’elles transitent par les canaux UNIX, ce qui le rend beaucoup plus flexible par rapport à un éditeur de texte classique.

Commencez par tester l’impression de votre saisie de texte sans aucune modification de sed :

Un terminal imprimant le contenu du

Remplacez la psous-commande par s, puis ajoutez trois barres obliques inverses (/) après celle-ci :

Insérez une expression régulière structurelle de la chaîne de caractères que vous souhaitez faire correspondre entre la première et la deuxième barre oblique inverse. Par exemple, je peux mettre la valeur suivante pour rechercher les mots commençant par « wo » dans ma chaîne d’entrée :

Placez votre curseur de texte entre la deuxième et la troisième barre oblique inverse, puis indiquez le texte par lequel vous souhaitez remplacer vos correspondances. Contrairement à la colonne précédente, cette section n’utilise pas d’expressions régulières structurelles :

Par défaut, sed remplace uniquement la première chaîne à laquelle il correspond sur une ligne particulière. Cela peut poser problème si vous souhaitez remplacer chaque occurrence d’un mot dans votre flux de texte. Pour résoudre ce problème, ajoutez l’ goption après la troisième barre oblique inverse de votre expression :

Un terminal affichant la sous-commande de substitution dans sed.

5. Copie des données textuelles dans l’espace de stockage

Sed utilise deux tampons pour stocker les données textuelles : l’espace de motif et l’espace de maintien. Le premier sert d’emplacement temporaire pour votre texte lorsqu’il passe par les expressions sed. Pendant ce temps, le second agit comme un presse-papiers dans lequel vous pouvez stocker des données textuelles arbitraires.

L’un des avantages de cette approche est qu’elle vous permet de « conserver » certains résultats sans avoir recours à des programmes externes. Cela peut être utile si vous envisagez d’utiliser sed pour traiter des manipulations de texte en plusieurs étapes.

Pour commencer à utiliser les espaces de maintien, assurez-vous d’abord que vous disposez d’un fichier contenant au moins quelques lignes de texte :

Remplacez la psous-commande par h, puis indiquez un numéro de ligne ou une valeur regex que sed doit faire correspondre dans votre fichier. Cela indiquera à sed de prendre cette ligne de texte spécifique et de la copier dans son espace de stockage :

Vous pouvez également utiliser la Hsous-commande pour stocker plusieurs lignes de texte dans votre espace de stockage. Par exemple, la commande suivante stocke la troisième et la quatrième ligne de mon fichier texte et l’imprime sur le terminal :

Un terminal montrant le processus de conservation de plusieurs lignes de texte dans les sed

6. Utilisation d’étiquettes pour créer des boucles dans Sed

Bien que sed ne soit pas un langage de programmation complet, il est néanmoins possible de créer des boucles à l’intérieur du programme. Cela est utile si vous avez besoin d’une expression sed qui doit parcourir en permanence un élément particulier de saisie de texte.

Pour créer une boucle dans sed, vous devez d’abord créer une étiquette pour votre expression sed. Pour cela, vous devez utiliser la :sous-commande suivie de l’étiquette que vous souhaitez utiliser pour votre expression.

Fournissez les critères de correspondance pour votre expression sed. Dans mon cas, je veux qu’elle aille à la fin de chaque ligne de mon texte d’entrée :

Saisissez les sous-commandes sed que vous souhaitez exécuter chaque fois que sed trouve une correspondance, puis placez-les entre accolades. Ce qui suit joint deux lignes adjacentes, remplace le caractère de nouvelle ligne par un espace, puis revient au début de l’expression :

Un terminal montrant le processus de suppression des caractères de nouvelle ligne à l'aide d'étiquettes sed dans des boucles.

Vous pouvez même étendre cette fonction pour qu’elle corresponde à presque tous les types de texte d’entrée. Par exemple, la commande suivante utilise la fonction regex étendue de sed pour supprimer les balises HTML de votre texte d’entrée :

Un terminal montrant sed supprimant les balises HTML dans un fichier à l'aide de boucles.

7. Apporter des modifications permanentes dans Sed

Comme tout autre outil UNIX, sed peut tirer parti de la redirection de sortie et des pipes. Cela vous permet non seulement de coller sed avec d’autres programmes, mais vous donne également la possibilité de rendre vos modifications permanentes.

La ligne de code suivante crée un nouveau fichier « welcome.txt » à partir de la sortie de ma commande sed :

Un terminal montrant la capacité de sed à utiliser la redirection de sortie pour enregistrer sa sortie dans des fichiers.

Outre la redirection de sortie, vous pouvez également utiliser l’indicateur intégré -ipour modifier votre fichier actuel au lieu d’afficher vos modifications dans la console de votre terminal. Par exemple, la commande suivante supprime tous les caractères de nouvelle ligne de mon fichier texte et l’enregistre :

Un terminal affichant l'indicateur -i dans sed, qui permet au programme de

Si tout cela vous a éveillé la curiosité à propos de la ligne de commande Linux, vous pouvez lire notre article précédent dans lequel nous parlons de certaines des invites Bash les plus intéressantes que vous pouvez utiliser aujourd’hui.

Crédit photo : Morgan Richardson via Unsplash . Toutes les modifications et captures d’écran par Ramces Red.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *