Lingunix

Les outils unix appliqués à la recherche linguistique et psycholinguistique

  • Augmenter la taille
  • Taille par défaut
  • Diminuer la taille

Introduction à SED : éditeur de flux pour les linguistes

Imprimer PDF

Le nom SED provient de l'abréviation de Stearm Editor pouvant être traduit par « éditeur de texte orienté flux ». L'éditeur sed traite un fichier texte ligne par ligne, que le flux provienne d'un autre filtre (cat texte.txt | sed) ou qu'il soit initié par sed lui même (sed fichier.txt).

Les possibilités de sed

Sed a quatre possibilités de fonctionnement, il peut :

  1. ajouter une ligne après une ligne (a)
  2. ajouter une ligne avant une ligne (i)
  3. afficher certaines lignes comme un filtre (p)
  4. substituer certaines lignes (s).


Nous utiliserons principalement l'éditeur sed comme outil de substitution permettant de remplacer partiellement ou totalement le contenu d'une ligne.

Exemple :

cat fichier_texte.txt | sed s/hello/bonjour/g > fichier_resultat.txt

Cette commande va remplacer toutes les occurrences « hello » par « bonjour » du fichier « fichier_texte.txt puis elle va rediriger le résultat dans le fichier_resultat.txt.

Les options de sed :

L'éditeur sed possède 4 options donnant la possibilité d'affiner le traitement de substitution :

  • g : remplacer tous les motifs dans la ligne
  • i : ne remplacer qu'à partir de la i-eme occurrence du motif dans la ligne
  • p : afficher la ligne si une substitution est réalisée
  • w : envoyer le résultat de la substitution dans un fichier

 

L'éditeur sed en pratique

Le cas de la substitution :

sed 's/chaine_de_caractère/chaîne_de_substitution/g'

Dans ce cas la chaîne de caractère sera remplacée par la chaîne de substitution dans toute la ligne.

Exemple :

Dans l'exemple suivant, nous allons remplacer la chaîne de caractère coriger par corriger :

echo "texte à corigé" | sed 's/corigé/corriger/g'

Résultat :

texte à corriger


Explication :

Nous avons fait appel à la commande echo pour écrire le texte « texte à coriger » dont nous avons rediriger le résultat (sous forme de flux) à l'aide d'un pipe ( le batonnet | ) dans l'éditeur sed (l'éditeur de flux). La commande sed 's/coriger/corriger/g' a remplacé coriger par corriger et nous a renvoyé la réponse dans le terminal.

Voilà, maintenant vous savez comment fonctionne les correcteurs automatiques d'orthographe et vous êtes désormais capable d'en programmer un !!! facile non ? (j'aurais pu aussi vous faire le coup du traducteur d'anglais-français en remplaçant hello par bonjour Cool )

En réalité l'éditeur sed est bien plus utile que cela, il est rarement utilisé comme un correcteur d'orthographe, mais quand on maîtrise cet outil, on peut en faire ce que l'on veut !

Aller plus loin avec sed

Supprimer tous les caractères spéciaux d'un texte :

echo "bonjour à tous !!! comment allez-vous???" | sed 's/\W/ /g'

Résultat :

bonjour à tous  comment allez vous

Explication :

Cette commande est très utile car elle permet de se débarrasser une bonne fois pour toute de tous les caractères spéciaux présent dans un texte. (les caractères non alphanumériques)

Les crochets avec sed :

L'usage des crochets [ ] avec sed donnent la possibilité de remplacer plusieurs caractères par un même caractère :

echo  "je vous ai répété cet après-midi qu'il n'y a pas d'accents en code ASCII, même avec le verbe être" | sed 's/[éèê]/e/g'

Résultat :

je vous ai repete cet apres-midi qu'il n'y a pas d'accents en code ASCII, meme avec le verbe etre

Explication

A l'aide des crochets [ ] nous avons remplacé les caractères é, è et ê par e.

Enchaînement de substitution avec sed :

Nous pouvons aisément exécuter successivement des blocs de substitutions séparés par un point-virgule avec l'éditeur sed :

echo  "le chemin des dames fût une boucherie" | sed 's/le/ART/g; s/chemin/NOM/g; s/des/ART-P/g; s/dames/NOM/; s/fût/VERBE/g; s/une/ART-I/; s/boucherie/NOM/g'

Résultat :

ART NOM ART-P NOM VERBE ART-I NOM

Explication :

Nous avons successivement remplacé les mots par leur nature : "le" par "ART"; "chemin" par "NOM"; des  par "ART-P"; etc...
Vous remarquerez que les simples quotes se trouvent au début et à la fin du script mais pas à la fin de chaque bloc se terminant obligatoirement par un point-virgule afin de permettre l'exécution séquentiel de remplacement.

Remplacer les lettres d'un mots par C ou V :

echo "Dans ce texte, toutes les lettres vont être remplacées par C pour consonne ou V pour Voyelle" | sed 's/[zrtpqsdfghjklmwxcvbnZRTPQSDFGHJKLMWXCVBN]/C/g; s/[aeiouyAEIOUY]/V/g'

Résultat :

CVCC CV CVCCV, CVVCVC CVC CVCCCVC CVCC êCCV CVCCCVCéVC CVC C CVVC CVCCVCCV VV C CVVC CVVVCCV

Explication :

Vous avez sans doute repéré les crochets [ ] entre lesquels se trouvent une fois toutes les consonnes et toutes les voyelles en minuscule puis en majuscule.
Ces crochets servent à définir plusieurs caractères à remplacer par un même caractère, ici C ou V.
Ce script remplace d'abord toutes les consonnes par la lettre C puis toutes les voyelles par la lettre V.

(je vous laisse deviner pourquoi on remplace d'abord les consonnes par C puis les voyelles par V et non l'inverse !)

Il y a deux choses à voir dans ce script :

  • les crochets permettant de définir plusieurs caractères à remplacer.
  • l'enchaînement successif de blocs de remplacements séparés par des point-virgules (voir ci-haut)


Notez aussi que les lettres accentuées n'ont pas été remplacées. Cela fût volontaire de ma part afin de ne pas surcharger le script exemple. Vous retiendrez qu'il est nécessaire de tenir compte de tous les caractères accentués existant - aussi bien pour les voyelles que pour les consonnes. Voir le script complèt

Le caractère esperluette : &

Le caractères esperluette est vraiment très pratique car il permet de remplacer une chaîne de caractère par elle-même suivie ou précédée d'une autre chaîne de caractères.

echo -e "Le système Linux 2.6 est  génial" | sed 's/Linux/<B>&<\/B>/g'

Résultat :

Le système <B>Linux</B> 2.6 est  génial

Remarques :

Vous savez maintenant transformer toutes vos prises de notes en véritable site web !

Vous savez aussi convertir presque n'importe quel format texte non compilé en n'importe quel autre format !!!

Mais attention à la manipulation des caractères spéciaux car ceux-ci doivent toujours être précédés d'un backslash, regardez bien dans la deuxième balise </B> du script.

Vous savez aussi dériver n'importe quel radical avec un préfixe et/ou un suffixe !

Je vous laisse réfléchir un peu... puisque vous savez presque tout sur l'éditeur sed ! Complice

Mise à jour le Samedi, 29 Octobre 2011 16:35