Un article de Wikipedia.y-project.com.
(Redirigé depuis
Sed (informatique))
En raison de limitations techniques, la typographie du titre, sed, n'a pu être correctement restituée.
sed (abréviation de Stream EDitor, « éditeur de flux ») est un programme informatique simple mais puissant, permettant d'appliquer différentes transformations prédéfinies à un flux séquentiel de données textuelles. sed lit des données d'entrée ligne par ligne, modifie chaque ligne selon des règles spécifiée dans un langage propre (appelé « script sed »), puis retourne cette ligne. Bien qu'originellement écrit pour Unix, par Lee E. McMahon en 1973/1974 (Bell Labs), sed est maintenant disponible sur pratiquement tous les systèmes d'exploitation disposant d'une interface en ligne de commande.
[] Présentation
sed est souvent décrit comme une éditeur de texte non-interactif. Il diffère d'un éditeur conventionnel en ceci que la séquence de traitement des deux flux d'informations nécessaires (les données et les instructions) est inversée. Au lieu de prendre une par une les commandes d'édition pour les appliquer à l'intégralité du texte (qui doit alors être intégralement en mémoire), sed ne parcours qu'une seule fois le fichier de texte, en appliquant l'ensemble des commandes d'édition à chaque ligne. Comme une seule ligne à la fois est présente en mémoire, sed peut traiter des fichiers de taille complètement arbitraire.
[] Principe de fonctionnement
Le jeu de commandes de sed est basé sur celui de l'éditeur ed. En effet, la majorité des commandes fonctionnent de manière similaire, malgré l'inversion du paradigme. Par exemple, la commande 25d signifie s'il s'agit de la ligne 25, alors efface-la (c'est-à-dire, ne la revoie par vers la sortie), au lieu de va à la ligne 25 et efface-la, telle que ed l'exécute. Les exceptions notables sont les commandes de copie et de déplacement, qui s'appliquent sur un intervalle de lignes, et qui par conséquent n'ont pas d'équivalent direct dans sed. À la place, sed introduit une mémoire tampon supplémentaire appelé hold space, ainsi que des commandes pour le manipuler.
Par exemple, la commande ed pour copier la ligne 25 à la ligne 76 (25t76) pourrait être coder en deux commandes distinctes dans sed (25h;76g).La première mémorise la ligne dans le hold space, la seconde la récupère lorsqu'il est temps.
[] Utilisation
L'exemple suivant montre une utilisation habituelle de sed :
sed -e 's/Ancien/Nouveau/g' nomFichierEntrée > nomFichierSortie
La commande s signifie substitute (« substituer »). Le drapeau g signifie global, ce qui indique que toutes les occurrences de chaque ligne doivent être remplacées. Après le premier caractère / est donnée une expression rationnelle que sed doit trouver. Après le deuxième / est précisée l'expression pour remplacer ce qu'il a trouvé. La commande de substitution (s///) est de loin la commande de sed la plus puissante et la plus fréquemment utilisée.
Une application possible de la subsitution est la correction d'une faute d'orthographe recurrente, ou le remplacement de toutes les occurrences d'un sigle. Par exemple :
sed -e 's/ficheir/fichier/g' sed.wikipedia > sed.wikipedia.correct
sed -e 's/WP/Wikipedia/g' sed.wikipedia > sed.wikipedia.correct
sed peut aussi servir à numéroter les lignes d'un fichier, supprimer les balises HTML d'un texte, etc. Toutefois, sur certaines plates-formes, le langage Perl est bien souvent utilisé en remplacement de sed.
Sur Unix, sed est souvent utilisé comme filtre dans un tube :
production_de_données | sed -e 's/x/y/'
Dans cet exemple, des données sont générées, puis elles sont modifiées à la volée en remplaçant les x par des y.
Plusieurs substitutions, ou autres commandes, peuvent être regroupées dans un fichier, appelé script sed (subst.sed dans l'exemple suivant), puis appliquée sur les données :
sed -f subst.sed nomFichierEntrée > nomFichierSortie
En plus des substitutions, d'autres types de traitements simples sont disponibles. Par exemple, le script suivant retire les lignes vides ou qui ne contiennent que des espaces :
sed -e '/^ *$/d' nomFichierEntrée
Cet exemple utilise des méta-caractères pour former des expressions rationnelles :
| Méta-caractère | Correspondance
|
| ^ | correspond avec le début d'une ligne
|
| $ | correspond avec la fin d'une ligne
|
| . | correspond avec n'importe quel caractère unique
|
| * | correspond à aucune ou plusieurs occurrences du caractère précédent
|
| [ ] | correspond avec n'importe quel caractère contenu entre les crochets
|
[] Programmation
Les structures complexes sont possibles avec sed, dans la mesure où il peut être assimilé à un langage de programmation très spécialisé mais simple. Par exemple, le contrôle du fil d'exécution peut être géré à l'aide d'étiquettes (labels, un : suivi du nom de l'étiquette) et de l'instruction de branchement b. Une instruction b suivie d'un nom d'étiquette valide tranférera le fil d'exécution au bloc suivant l'étiquette. Si l'étiquette n'existe pas, alors l'instruction termine le script.
sed est l'une des commandes Unix les plus anciennes permettant à la ligne de commande de traiter des fichiers de données. Il a naturellement évolué comme successeur de la célèbre commande grep. Cousin du plus jeune Awk, sed permet au script shell d'effectuer des traitements puissants et très utiles. sed a probablement été l'un des tous premiers outils d'Unix à réellement encourager l'utilisation omniprésente des expressions rationnelles. En ce qui concerne la vitesse de traitement, sed est généralement plus rapide que Perl, et sensiblement plus rapide que Awk.
sed et Awk sont souvent cités comme étant les ancêtres et les inspirateurs de Perl. En particulier, la syntaxe s/// de l'exemple précédent fait partie intégrante de la syntaxe de Perl.
Le langage de sed ne dispose pas de variable et ne possède qu'une goto primitif comme instruction de contrôle de flux. Toutefois, il est turing-complet [1].
[] Extensions
GNU sed intègre plusieurs nouvelles fonctionnalités tels que l'édition « en place » (le fichier original est remplacé par le résultat du traitement par sed). L'édition en-place est souvent utilisée pour remplacer un script ed. Par exemple :
sed -i 's/abc/def/' fichier
peut être utilisé à la place de
ed fichier
1,$ s/abc/def/
w
q
Il existe une version améliorée de sed, appelée super-sed (ssed [2]), qui intègre des expressions rationnelles compatibles avec Perl.
[] Exemple
L'exemple qui suit montre comment sed, qui traite habituellement chaque ligne séparément, peut supprimer les sauts de lignes des lignes dont la ligne qui suit commence par un espace.
Pour illustrer l'effet souhaité, considérons le texte suivant :
This is my cat
my cat's name is betty
This is my dog
my dog's name is frank
La commande sed donnera :
This is my cat my cat's name is betty
This is my dog my dog's name is frank
Voici la commande :
sed 'N;s/\n //g;P;D;'
qui peut se décomposer de la manière suivante (les ; permettent de séparer les commandes) :
N;s/\n //g;P;D;
N lit (aussi) la ligne suivante
s/ //g effectue la substitution...
/\n / ... d'un saut de ligne suivi d'un espace...
// ... par rien du tout...
g ... pour toutes les occurrences
P retourne le résultat du traitement
D efface ce qui reste afin de ne pas afficher
la ligne suivante deux fois
[] Voir aussi
[] Liens internes
[] Liens externes
DernierMirror
Le Texte ci-dessus est disponible sous GNU Free Documentation License.
La source est wikipedia http://fr.wikipedia.org/wiki/sed (informatique)