Retour au blog

Un aperçu de l'éditeur de flux Sed pour manipuler du texte sous Linux

Un aperçu de l'éditeur de flux Sed pour manipuler du texte sous Linux

La commande sed est une abréviation pour stream editor. C'est un outil très populaire sur les systèmes Linux/UNIX. Sed n'est pas un éditeur de texte en soi. Cependant, il peut effectuer diverses modifications pour manipuler un texte donné. Le texte d'entrée est envoyé sous forme de flux. Sed effectue ensuite les actions demandées sur le flux. Ce guide donne un aperçu de la sed commande et de la manière de l'utiliser afin de manipuler avec succès du texte sous Linux.

Sed sous Linux

Le flux d'entrée de sed peut provenir soit d'un fichier texte, soit de STDIN (entrée standard). Nous pouvons travailler avec la sortie d'une autre commande ou travailler directement avec un fichier texte. L'outil sed est préinstallé sur toutes les Linux distributions.

Aperçu de l'utilisation de Sed

La sed commande suit la structure suivante :

À des fins de démonstration, nous avons récupéré la version texte de la licence GPL version 3:

Manipulate Text with Sed 7

La sed commande suivante affichera le contenu du fichier texte :

Ici, sed effectue les opérations décrites entre les guillemets simples et affiche la sortie. Comme aucune option n'est définie, sed effectuera simplement une opération vide et affichera l'intégralité du contenu du fichier.

Sed accepte également la sortie d'une autre commande comme flux d'entrée. Dans l'exemple suivant, redirigez le contenu du fichier texte GPL v3 vers sed pour effectuer une opération vide :

Comment afficher des lignes

Sans aucune option spécifiée, sed affichera directement tout le contenu du fichier. À la place, nous pouvons envoyer explicitement la commande d'affichage pour imprimer les résultats directement sur la sortie standard (STDOUT).

Pour afficher la sortie, utilisez le caractère p:

Manipulate Text with Sed 6

Par défaut, sed affiche la sortie à l'écran. Parce que nous avons spécifiquement utilisé la commande d'affichage, sed affichera chaque ligne deux fois. Sed fonctionne ligne par ligne. Il lit une ligne, effectue des opérations spécifiques, l'affiche, puis passe à la ligne suivante.

Comme nous pouvons le voir, chaque ligne est affichée deux fois. Si le résultat est confus ainsi, nous pouvons le nettoyer en utilisant l'option -n. Elle supprime la fonction d'affichage automatique. Comme nous envoyons la commande d'affichage, nous n'avons pas besoin d'activer la fonction d'affichage de sortie par défaut :

Classes de caractères Regex

Dans expressions régulières, il existe différentes classes de caractères. Chacune de ces classes a une plage. De nombreuses classes ont également plusieurs expressions. La plupart des classes sont des plages de caractères :

    • [a-z] : Caractère minuscule
    • [A-Z] : Caractère majuscule
    • [0-9] : Chiffres
    • [a-zA-z] : Alphabet
    • [a-zA-z0-9] : Tout caractère alphanumérique

Ces classes de caractères ont également des notations différentes :

    • [:lower:] : Caractère minuscule
    • [:upper:] : Caractère majuscule
    • [:digit:] : Chiffres
    • [:alpha:] : Alphabet
    • [:alphanum:] : Caractère alphanumérique

Par exemple, la commande suivante affichera toutes les lignes qui contiennent au moins un chiffre :

Manipulate Text with Sed 3

Plages d'adresses

Nous pouvons spécifier la partie spécifique du flux de texte avec laquelle travailler. Il peut s'agir de l'emplacement statique d'une ligne ou d'une plage de lignes. Dans le premier exemple, nous allons afficher la ligne 5 du fichier texte GPL v3 :

$ sed -n

Au lieu d'une seule ligne, nous pouvons également spécifier une plage de lignes avec laquelle travailler. Ici, nous avons indiqué la plage d'adresses de la ligne 5 à la ligne 9 (soit 5 lignes au total) sur laquelle sed va travailler :

gpl-3.0.txt

Il existe également différentes manières de spécifier l'adresse de la ligne. Au lieu de déterminer nous-mêmes les numéros de ligne, nous pouvons réorganiser l'exemple précédent afin que sed commence à la ligne 5 et agisse sur les 5 lignes suivantes :

5,+5p

Une autre façon de spécifier des lignes consiste à utiliser des intervalles. Dans l'exemple suivant, sed commencera à la ligne 1 et agira sur une ligne sur deux :

Suppression de texte

Jusqu'à présent, nous avons travaillé sur l'affichage des lignes de texte cibles. Au lieu de les afficher, nous pouvons supprimer les lignes de la sortie. Dans l'exemple suivant, nous allons supprimer plusieurs lignes depuis le début. Ici, nous n'avons pas besoin d'utiliser l'option -n car nous voulons que sed affiche tout le reste qui n'est pas supprimé. Pour la suppression de lignes, nous utiliserons l'option d:

Manipulate Text with Sed 2

Notez que le fichier source est toujours intact. Sed effectue simplement la suppression de lignes lors de la sortie. Si vous le souhaitez, vous pouvez enregistrer la sortie de sed dans un fichier. Vous pouvez écraser le fichier d'origine ou l'enregistrer sous un autre nom :

Au lieu d'écrire manuellement la sortie dans un fichier, sed peut effectuer une modification sur place du fichier d'origine. En résumé, sed modifiera le fichier d'origine et y écrira toutes les modifications apportées. Cette méthode écrasera le fichier d'origine, elle doit donc être utilisée avec précaution :

Parce que la modification sur place est dangereuse, sed est doté d'une fonctionnalité de sauvegarde. Lors de modifications sur place, utilisez -i.bak au lieu de -i pour effectuer une sauvegarde avant la modification. Sed créera le fichier de sauvegarde avec l'extension .bak :

Substitution de texte

C'est, de loin, l'une des implémentations les plus courantes de sed. Il recherche un motif de texte et le remplace par un texte donné. Ici, le motif de texte est décrit sous forme d'expressions régulières (regex en abrégé). Pour en savoir plus sur l'utilisation des regex, suivez ce tutoriel qui explique comment utiliser Grep avec des regex pour rechercher des motifs de texte dans des fichiers.

Voici un exemple de la substitution de texte la plus basique utilisant des regex :

Ici, s est la commande de substitution. Les barres obliques sont des délimiteurs pour le motif et le remplacement. Mettons cela en pratique :

Manipulate Text with Sed 5

L'exemple suivant démontrera l'utilisation du trait de soulignement (_). Ici, les traits de soulignement feront office de délimiteurs :

Ici, nous recherchons com/index pour le remplacer par net/home. Notez l'emplacement des traits de soulignement car ils sont très cruciaux. Pour exemple, s'il vous manque le dernier trait de soulignement, sed renverra une erreur :

Nous avons besoin d'un fichier fictif pour nous entraîner à la substitution. Ici, j'ai une version tronquée du fichier texte GPL v3 :

Effectuons quelques substitutions de texte de base :

Jetez un œil à l'exemple suivant. Nous voulons remplacer toutes les occurrences de the par THE :

$ echo

Vous remarquez quelque chose ? Sed n'a pas modifié toutes les occurrences de the. En fait, seule la première occurrence a été modifiée. Que se passe-t-il ? C'est le comportement par défaut de l'option s. Elle ne correspond qu'à la première occurrence d'une ligne donnée et passe à la suivante. Pour s'assurer que sed vérifie toute la ligne pour le motif de recherche, nous devons utiliser un drapeau optionnel g. Let’s fix the command:

Maintenant, cela fonctionne comme prévu. Une autre façon intéressante d'utiliser la commande consiste à spécifier le nombre d'occurrences à modifier. Dans l'exemple précédent, il y avait 3 occurrences de the, n'est-ce pas ? Et si nous spécifiions de ne modifier que la 3e occurrence ? Le changement se produira au niveau du drapeau optionnel :

Si vous travaillez avec un grand fichier texte, il peut être utile que sed n'affiche que les lignes où les substitutions ont eu lieu. Pour y parvenir, nous devons ajouter un autre drapeau supplémentaire p:

Manipulate Text with Sed 4

Sensibilité à la casse

Par défaut, toutes les opérations sed sont sensibles à la casse. La commande suivante démontrera le comportement par défaut de la sensibilité à la casse :

$ echo "HELLO WORLD"

En raison de la non-correspondance de la casse, il n'y a aucun changement. Dans une telle situation, nous pouvons dire à sed de désactiver la sensibilité à la casse. Pour ce faire, ajoutez le drapeau optionnel i:

Comment remplacer et référencer des textes

La puissance de sed réside principalement dans sa capacité à utiliser des expressions régulières. Avec des modèles de regex plus avancés et complexes, nous pouvons accomplir beaucoup plus. Pour exemple, nous pouvons remplacer du texte du début d'un fichier jusqu'à un certain emplacement. Jetez un œil à l'expression suivante :

Ici, le texte du caret (^) indique le début de la ligne. L'opérateur de correspondance de n'importe quel caractère est signifié par le point (.). L'astérisque (*) est l'expression générique, correspondant du début de la ligne jusqu'à GNU.

Une autre astuce intéressante consiste à utiliser le symbole &. Nous pouvons l'utiliser pour mettre en évidence les zones où sed trouve le motif de recherche :

Manipulate Text with Sed

Réflexions finales

Dans ce tutoriel, nous avons exploré les bases de la commande sed . Nous avons appris à afficher des lignes spécifiques, rechercher des textes, supprimer et remplacer des textes, écraser des textes et utiliser des expressions régulières. Une commande sed correctement construite peut transformer radicalement un document texte. Vous pouvez maintenant manipuler avec succès du texte sous Linux à l'aide de sed.

Bonne informatique !

author

Hark Labs

Auteur · CloudSigma

Preslav Dobrev est un designer créatif chez CloudSigma, axé sur une identité commerciale cohérente à travers des canaux marketing traditionnels et innovants. Il excelle à fusionner la vision artistique avec le marketing stratégique pour créer des récits de marque percutants.

Commentaires

Aucun commentaire pour l'instant. Soyez le premier.