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:16] Hypathie [La commande s] |
utilisateurs:hypathie:tutos:sed-par-la-methode-structuraliste [28/07/2014 18:45] Hypathie [Introduction] |
||
---|---|---|---|
Ligne 67: | Ligne 67: | ||
1) toutes les options "lues" par le shell qui lance sed, ne sont pas toutes associables entre elles selon les commandes internes utilisées.\\ | 1) toutes les options "lues" par le shell qui lance sed, ne sont pas toutes associables entre elles selon les commandes internes utilisées.\\ | ||
2) certains types d'adressage ne fonctionnent qu'avec certaines commandes de sed.\\ | 2) certains types d'adressage ne fonctionnent qu'avec certaines commandes de sed.\\ | ||
- | 3) toutes les commandes internes ne sont pas toutes associables entre elles. | + | 3) toutes les commandes internes ne sont pas toutes associables entre elles.\\ |
+ | 4) certaines commandes nécessitent la présence d'autres commandes pour que leurs usages prennent sens. | ||
__**Cette grammaire se résume ainsi** :__ | __**Cette grammaire se résume ainsi** :__ | ||
Ligne 79: | Ligne 80: | ||
* 1) la mise en relation ''[options]'' <=> ''cmd_de_sed'' ;\\ | * 1) la mise en relation ''[options]'' <=> ''cmd_de_sed'' ;\\ | ||
* 2) ''/adressages/'' <=> ''cmd_de_sed'' | * 2) ''/adressages/'' <=> ''cmd_de_sed'' | ||
- | * La compréhension globale de sed dépend ensuite simplement de la mise en relation de 1 et 2. | + | * 3) la mise en relation de différentes commandes |
+ | |||
+ | La compréhension globale de sed dépend tout d'abord de la mise en relation de 1 et 2. | ||
</note> | </note> | ||
Ligne 1122: | Ligne 1125: | ||
====La commande N==== | ====La commande N==== | ||
La commande "N" insère le caractère "nouvelle ligne" (\n) à la fin du contenu de l'espace de travail et ajoute la ligne suivante du flux d'entrée à l'espace de travail.\\ | La commande "N" insère le caractère "nouvelle ligne" (\n) à la fin du contenu de l'espace de travail et ajoute la ligne suivante du flux d'entrée à l'espace de travail.\\ | ||
- | Une fois le caractère "nouvelle ligne" dans l'espace de travail, il peut être appelé par \n par une commande interne de sed qui peut alors substituer un caractère par une nouvelle ligne.\\ | + | Une fois le caractère "nouvelle ligne" dans l'espace de travail, il peut être appelé par \n par une commande interne de sed qui peut alors substituer un caractère une nouvelle ligne par un espace.\\ |
===Exemples=== | ===Exemples=== | ||
+ | |||
+ | * Sans adressage : | ||
<code user> | <code user> | ||
- | echo -e "A\nB\nC\nD\nE" | sed '{N;s/B/X/}' | + | echo -e "coucou\ntiti" | sed '/coucou/{N;s/\n/ /}' |
+ | </code> | ||
+ | <code> | ||
+ | coucou titi | ||
+ | </code> | ||
+ | > Là, pour la ligne comportant "coucou", s se sert du caractère de fin de ligne placé dans l'espace de travail pour pouvoir matcher ce retour à la ligne avec "echo". | ||
+ | >Elle peut alors le remplacer par un espace entre "coucou" et "titi". | ||
+ | |||
+ | * Avec adressage : | ||
+ | <code user> | ||
+ | echo -e "A\nB\nC\nD\nE" | sed '/B/{N;s/\n/ /}' | ||
</code> | </code> | ||
<code> | <code> | ||
A | A | ||
- | X | + | B C |
- | C | + | |
D | D | ||
E | E | ||
</code> | </code> | ||
- | > Là, le caractère nouvelle ligne placé dans l'espace de travail n'a pas été utilisé par la substitution. | ||
+ | <note tip> | ||
+ | C'est l'inverse de ceci ! | ||
<code user> | <code user> | ||
- | echo -e "coucou\ntiti" | sed '/coucou/{N;s/\n/ /}' | + | echo "coucou titi" | sed 's/ /\n/' |
</code> | </code> | ||
<code> | <code> | ||
- | coucou titi | + | coucou |
+ | titi | ||
</code> | </code> | ||
- | > Là, pour la ligne comportant "coucou", s se sert du caractère de fin de ligne placé dans l'espace de travail pour pouvoir matcher ce retour à la ligne avec "echo". | + | |
- | >Elle peut alors le remplacer par un espace entre "coucou" et "titi". | + | Bien penser dans la grammaire de sed ! |
+ | S'il y a plus deux mots séparés d'espaces, donc plus de deux espaces à substituer en autant de saut de lignes,\\ | ||
+ | il faudrait ajouter l'option "g" de la commande s.\\ | ||
+ | Sinon, sed affiche le résultat et sort après avoir trouvé la première occurrence d'un espace. | ||
+ | </note> | ||
====D ( Delete ) ==== | ====D ( Delete ) ==== |