Comment utiliser Sed sous Linux
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 n
sous-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 :
Une autre fonction de base de sed est la p
sous-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 p
sous-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 p
présent ou non :
Pour désactiver ce comportement étrange, ajoutez l’ -n
indicateur avant d’exécuter vos sous-commandes sed :
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 p
sous-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 » :
Vous pouvez également utiliser la p
sous-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 » :
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 d
sous-commande avec la ligne ou la plage spécifique que vous souhaitez supprimer :
Similairement à l’impression de lignes de texte, la d
sous-commande fonctionne avec des plages de plusieurs lignes. Par exemple, la commande suivante supprimera les quatre premières lignes du fichier « hello.txt » :
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 :
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 a
commande suivie du texte que vous souhaitez ajouter :
Il est également possible d’inclure des fichiers entiers dans un flux texte sed. Pour ce faire, utilisez la r
commande suivie du nom du fichier que vous souhaitez ajouter :
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 :
Remplacez la p
sous-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’ g
option après la troisième barre oblique inverse de votre expression :
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 p
sous-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 H
sous-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 :
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 :
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 :
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 :
Outre la redirection de sortie, vous pouvez également utiliser l’indicateur intégré -i
pour 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 :
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