Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format
PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
utilisateurs:hypathie:tutos:sed-par-la-methode-structuraliste [28/07/2014 18:52] Hypathie [Les rapports d'implication options de sed <=> commandes de sed] |
utilisateurs:hypathie:tutos:sed-par-la-methode-structuraliste [29/07/2014 12:32] Hypathie [Introduction] |
||
---|---|---|---|
Ligne 20: | Ligne 20: | ||
Il ne faut pas confondre la commande sed reconnue par le shell (qui lance le programme sed) avec les commandes internes du programme sed((y ; s ; a\ ; i\ ; p ; d ; c\ ; w ; q ...))\\ | Il ne faut pas confondre la commande sed reconnue par le shell (qui lance le programme sed) avec les commandes internes du programme sed((y ; s ; a\ ; i\ ; p ; d ; c\ ; w ; q ...))\\ | ||
- | Par défaut (sans option) sed traite le flux d'entrée et affiche sur la sortie, non seulement le flux d'entrée qu'elle a lu ligne par ligne, mais aussi ce qu'elle a fait sur certaine ligne.\\ | + | Par défaut (sans option) sed traite le flux d'entrée et affiche sur la sortie, non seulement le flux d'entrée qu'elle enregistre, mais aussi le résultat de son traitement.\\ |
- | Le flux d'entrée peut être ce qui lui est transmis par un pipe en ligne de commandes ou un fichier.\\ | + | Le flux d'entrée peut être ce qui lui est transmis par un pipe en ligne de commandes ou par un fichier donné en argument.\\ |
* Méthodes d'appel : | * Méthodes d'appel : | ||
<code> | <code> | ||
- | cmd[cat|echo|ls|...] fichier[repertoire]\ | + | cmd[cat|echo|ls|...] [fichier[repertoire]]\ |
- | | sed [options] cmd_de_sed | + | | sed [options] cmd_de_sed |
</code> | </code> | ||
ou | ou | ||
Ligne 58: | Ligne 58: | ||
__**"Options sensibles"**__\\ | __**"Options sensibles"**__\\ | ||
- | -J'appelle "options sensibles" celles qui s'utilisent en rapport aux commandes internes de sed, et dont l'usage réclame une connaissance de la "grammaire" de sed. | + | -J'appelle "options sensibles" celles dont l'utilisation dépend des commandes internes de sed, et dont l'usage réclame une connaissance de la "grammaire" de sed. |
-J'appelle __"grammaire" du programme sed__ les règles qui gèrent la syntaxe global d'une ligne de commandes sed relativement aux commandes internes de sed. | -J'appelle __"grammaire" du programme sed__ les règles qui gèrent la syntaxe global d'une ligne de commandes sed relativement aux commandes internes de sed. | ||
Ligne 320: | Ligne 320: | ||
|a\texte |ajouter du texte | | |a\texte |ajouter du texte | | ||
- | + | ===Préparation === | |
- | ==="i" : insertion avant la ligne d'adressage=== | + | <code text sed-automn.txt> |
- | <code user> | + | |
- | sed -i '1i\Ton sentiment comme atmosphère' sed-cmd | + | |
- | </code> | + | |
- | <code user> | + | |
- | cat sed-cmd | + | |
- | </code> | + | |
- | Ton sentiment comme atmosphère | + | |
automne | automne | ||
mon bel automne | mon bel automne | ||
Ligne 345: | Ligne 338: | ||
et son adieu | et son adieu | ||
</code> | </code> | ||
+ | |||
+ | ==="i" : insertion avant la ligne d'adressage=== | ||
+ | |||
+ | <code user> | ||
+ | sed '1i\Ton sentiment comme atmosphère' sed-automn.txt | ||
+ | </code> | ||
+ | |||
+ | >Le titre "Ton sentiment comme atmosphère" est ajouté sur la la sortie standard. | ||
=== "a" : ajout après l'adressage=== | === "a" : ajout après l'adressage=== | ||
<code user> | <code user> | ||
- | sed -e '1a\ ' -e '2,$s/^/ /' -i sed-cmd | + | sed -e '1a\ ' -e '2,$s/^/ /' sed-automn.txt |
</code> | </code> | ||
+ | |||
+ | >Une ligne vide est ajoutée en deuxième ligne par la première ajout que si on indique au moins un caractère | ||
+ | >Il est plus simple, en cas de succession de commandes parmi lesquelles figure __une commande d'ajout__ de ligne, | ||
+ | >d'utiliser l'adressage d'encadrement /^mon/. | ||
+ | |||
+ | <code user>sed -e '1a\ ' -e '/^mon/,$s/^/ /' sed-automn.txt</code> | ||
+ | |||
+ | ===Utiliser conjointement i et a === | ||
+ | |||
+ | Modifier le fichier "sed-automn.txt" : | ||
+ | * en insérant le titre "Ton sentiment comme atmosphère" | ||
+ | * en insérant une ligne ne comportant qu'un espace, | ||
+ | * en ajoutant un espace à partir de la ligne /^automne/ | ||
+ | |||
+ | <code user> | ||
+ | sed -e '1i\Ton sentiment comme atmosphère'\ | ||
+ | -e '/^automne/i\ '\ | ||
+ | -e '1,$s/^/ /' -i sed-automn.txt | ||
+ | </code> | ||
+ | |||
+ | >Il est à noter les adressages utilisés pour obtenir ce résultat, par rapport à ceux utilisés précédemment | ||
+ | >pour les exemples où les commandes i et a étaient utilisées seules. | ||
+ | |||
+ | On aurait pu utiliser pour obtenir le même résultat : | ||
+ | <code user> | ||
+ | sed -e '1i\Ton sentiment comme atmosphère'\ | ||
+ | -e '1i\ '\ | ||
+ | -e '1,$s/^/ /' -i sed-automn.txt | ||
+ | </code> | ||
+ | |||
+ | >Voir la prochaine note. | ||
+ | |||
+ | ===Résultat=== | ||
+ | L'option ''-i'' a été utilisée, le fichier "sed-automn.txt" est maintenant : | ||
<code user> | <code user> | ||
- | cat sed-cmd | + | cat sed-automn.txt |
</code> | </code> | ||
<code> | <code> | ||
Ligne 372: | Ligne 407: | ||
et son adieu | et son adieu | ||
</code> | </code> | ||
+ | <note important> | ||
+ | Attention !\\ | ||
+ | |||
+ | Si on utilise __plusieurs commandes d'ajout__, la charge de la mémoire tampon est si importantes | ||
+ | que sed se réfère à la numérotation des lignes du __fichier d'origine__ pour l'adressage par numéro de ligne __de toutes les commandes__!\\ | ||
+ | |||
+ | Ainsi cette ligne de commandes sed : | ||
+ | <code user> | ||
+ | sed -e '1i\Ton sentiment comme atmosphère'\ | ||
+ | -e '2i\ '\ | ||
+ | -e '2,$s/^/ /' sed-automn.txt | ||
+ | </code> | ||
+ | <code> | ||
+ | Ton sentiment comme atmosphère | ||
+ | automne | ||
+ | |||
+ | mon bel automne | ||
+ | # J'ai supprimé le reste du retour qui ne sert pas l'explication. | ||
+ | </code> | ||
+ | Et celle-ci : | ||
+ | |||
+ | <code user> | ||
+ | sed -e '1i\Ton sentiment comme atmosphère'\ | ||
+ | -e '2i\ '\ | ||
+ | -e '3,$s/^/ /' sed-automn.txt | ||
+ | </code> | ||
+ | <code> | ||
+ | Ton sentiment comme atmosphère | ||
+ | automne | ||
+ | |||
+ | mon bel automne | ||
+ | dans les vergers | ||
+ | # J'ai supprimé le reste du retour qui ne sert pas l'explication. | ||
+ | </code> | ||
+ | Ce point est très important pour la création de scripts sed plus complexes.\\ | ||
+ | Il faut toujours considérer le contenu de la mémoire tampon pour enchaîner plusieurs commandes. | ||
+ | </note> | ||
====Adressage double ==== | ====Adressage double ==== | ||
Ligne 388: | Ligne 460: | ||
|y/..../..../ | translittération | | |y/..../..../ | translittération | | ||
|c\texte |changement de texte| | |c\texte |changement de texte| | ||
- | |||
- | ===Préparation === | ||
- | <code text sed-cmd> | ||
- | automne | ||
- | mon bel automne | ||
- | dans les vergers | ||
- | du fond du ciel | ||
- | les éperviers | ||
- | de tes yeux planent | ||
- | tes feuilles | ||
- | tes fruits, ta pomme | ||
- | et le cerf, et son brame | ||
- | à jamais aimés | ||
- | de l'homme | ||
- | en ton cheveu | ||
- | me donnent | ||
- | et des langueurs | ||
- | et son adieu | ||
- | </code> | ||
- | |||
===="p" : affichage ==== | ===="p" : affichage ==== | ||
<code user> | <code user> | ||
- | sed -n '/.*,[[:space:]]/,10p' sed-cmd | + | sed -n '/.*,[[:space:]]/,9p' sed-automn.txt |
</code> | </code> | ||
<code> | <code> | ||
- | tes fruits, ta pomme | + | tes fruits, ta pomme |
- | et le cerf, et son brame | + | et le cerf, et son brame |
- | à jamais aimés | + | |
</code> | </code> | ||
===="d" : suppression ==== | ===="d" : suppression ==== | ||
<code user> | <code user> | ||
- | sed '/tes/,10d' sed-cmd | + | sed -e '4,6d' -e '8,14d' sed-automn.txt |
</code> | </code> | ||
<code> | <code> | ||
- | automne | + | Ton sentiment comme atmosphère |
- | mon bel automne | + | |
- | dans les vergers | + | automne |
- | du fond du ciel | + | les éperviers |
- | les éperviers | + | me donnent |
- | de l'homme | + | et des langueurs |
- | en ton cheveu | + | et son adieu |
- | me donnent | + | |
- | et des langueurs | + | |
- | et son adieu | + | |
</code> | </code> | ||
==== "=" numérotation==== | ==== "=" numérotation==== | ||
<code user> | <code user> | ||
- | sed '1,$=' sed-cmd | + | sed '1,$=' sed-automn.txt |
</code> | </code> | ||
<code> | <code> | ||
1 | 1 | ||
- | automne | + | Ton sentiment comme atmosphère |
2 | 2 | ||
- | mon bel automne | + | |
3 | 3 | ||
- | dans les vergers | + | automne |
4 | 4 | ||
- | du fond du ciel | + | mon bel automne |
5 | 5 | ||
- | les éperviers | + | dans les vergers |
6 | 6 | ||
- | de tes yeux planent | + | du fond du ciel |
7 | 7 | ||
- | tes feuilles | + | les éperviers |
8 | 8 | ||
- | tes fruits, ta pomme | + | de tes yeux planent |
9 | 9 | ||
- | et le cerf, et son brame | + | tes feuilles |
10 | 10 | ||
- | à jamais aimés | + | tes fruits, ta pomme |
11 | 11 | ||
- | de l'homme | + | et le cerf, et son brame |
12 | 12 | ||
- | en ton cheveu | + | à jamais aimés |
13 | 13 | ||
- | me donnent | + | de l'homme |
14 | 14 | ||
- | et des langueurs | + | en ton cheveu |
15 | 15 | ||
- | et son adieu | + | me donnent |
+ | 16 | ||
+ | et des langueurs | ||
+ | 17 | ||
+ | et son adieu | ||
</code> | </code> | ||
+ | <note tip> | ||
+ | Pour n'avoir que la numérotation, on peut utiliser l'option ''-n'' : | ||
+ | <code user> | ||
+ | sed -n '=' sed-automn.txt | ||
+ | </code> | ||
+ | </note> | ||
==== "y" : translittération==== | ==== "y" : translittération==== | ||
<code user> | <code user> | ||
- | sed '2,$!y/a/A/' sed-cmd | + | sed '3,4y/a/A/' sed-automn.txt |
</code> | </code> | ||
<code> | <code> | ||
- | Automne | + | Ton sentiment comme atmosphère |
- | mon bel automne | + | |
- | dans les vergers | + | Automne |
- | du fond du ciel | + | mon bel Automne |
- | les éperviers | + | dans les vergers |
- | de tes yeux planent | + | du fond du ciel |
- | tes feuilles | + | les éperviers |
- | tes fruits, ta pomme | + | de tes yeux planent |
- | et le cerf, et son brame | + | tes feuilles |
- | à jamais aimés | + | tes fruits, ta pomme |
- | de l'homme | + | et le cerf, et son brame |
- | en ton cheveu | + | à jamais aimés |
- | me donnent | + | de l'homme |
- | et des langueurs | + | en ton cheveu |
- | et son adieu | + | me donnent |
+ | et des langueurs | ||
+ | et son adieu | ||
</code> | </code> | ||
==== "c" : changement de texte==== | ==== "c" : changement de texte==== | ||
<code user> | <code user> | ||
- | sed -e '3,$c\ | + | sed -e '5,$c\ |
- | fleuve Léthé\ | + | fleuve Léthé\ |
- | en ton grand coeur\ | + | en ton grand coeur\ |
- | devient Vestale\ | + | devient Vestale\ |
- | ' sed-cmd | + | ' sed-automn.txt |
</code> | </code> | ||
<code> | <code> | ||
- | automne | + | Ton sentiment comme atmosphère |
- | mon bel automne | + | |
- | fleuve Léthé | + | automne |
- | en ton grand coeur | + | mon bel automne |
- | devient Vestale | + | fleuve Léthé |
+ | en ton grand coeur | ||
+ | devient Vestale | ||
</code> | </code> | ||
+ | ====Toutes ces commandes regroupées en un script ==== | ||
+ | * Créer un script qui utilisera toutes ces commandes | ||
+ | * pour transformer le fichier "sed-automn.txt" | ||
+ | |||
+ | ===Le script === | ||
+ | |||
+ | <code bash> | ||
+ | /.*,[[:space:]]/,9p | ||
+ | 4,6d;8,14d | ||
+ | #1,$= | ||
+ | 3,4y/a/A/ | ||
+ | 5,$c\ | ||
+ | fleuve Léthé\ | ||
+ | en ton grand coeur\ | ||
+ | devient Vestale | ||
+ | </code> | ||
+ | |||
+ | ===Lancer le script avec l'option -i === | ||
+ | |||
+ | <code user> | ||
+ | sed -f script-sed.poesie -i sed-automn.txt | ||
+ | </code> | ||
+ | <code> | ||
+ | Ton sentiment comme atmosphère | ||
+ | |||
+ | Automne | ||
+ | tes fruits, ta pomme | ||
+ | et le cerf, et son brame | ||
+ | fleuve Léthé | ||
+ | en ton grand coeur | ||
+ | devient Vestale | ||
+ | </code> | ||
=====La commande "s"===== | =====La commande "s"===== |