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:06] Hypathie [Les commande fonctionnant en rapport avec d'autres commandes] |
utilisateurs:hypathie:tutos:sed-par-la-methode-structuraliste [28/07/2014 18:39] Hypathie [Les commande fonctionnant en rapport avec d'autres commandes] |
||
---|---|---|---|
Ligne 22: | Ligne 22: | ||
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 a lu ligne par ligne, mais aussi ce qu'elle a fait sur certaine ligne.\\ | ||
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 un fichier.\\ | ||
+ | |||
+ | * Méthodes d'appel : | ||
<code> | <code> | ||
Ligne 508: | Ligne 510: | ||
=====La commande "s"===== | =====La commande "s"===== | ||
- | ====Méthodes d'appel==== | + | ====Syntaxe globale==== |
<code> | <code> | ||
- | s/motif/substitut/[options_de_s] fichier | + | s/motif/substitut/[options_de_s] |
- | </code> | + | |
- | ou | + | |
- | <code> | + | |
- | cmd | s/motif/substitut/[options_de_s] | + | |
</code> | </code> | ||
- | >Voir : [[doc:systeme:sed#la-fonction-de-substitution-s]] | + | À voir : [[doc:systeme:sed#la-fonction-de-substitution-s]] |
- | ====Détail : /motif/substitut/ ==== | + | ====Détail : "motif" et "substitut" ==== |
<code user> | <code user> | ||
s/motif/substitut/ | s/motif/substitut/ | ||
Ligne 532: | Ligne 530: | ||
====Détail : la ligne de commande "s"==== | ====Détail : la ligne de commande "s"==== | ||
<code c> | <code c> | ||
- | s/expression1/expression2/[options_de_s] | + | s/motif/substitut/[options_de_s] |
</code> | </code> | ||
===les séparateurs ( / )=== | ===les séparateurs ( / )=== | ||
Ligne 737: | Ligne 735: | ||
* Exemple inverser la deuxième ligne de "sed1.txt" | * Exemple inverser la deuxième ligne de "sed1.txt" | ||
<code user> | <code user> | ||
- | |||
- | </code> | ||
sed -e '2s/\(titi\) \(grosminet\)/\2 \1/g' sed1.txt | sed -e '2s/\(titi\) \(grosminet\)/\2 \1/g' sed1.txt | ||
+ | </code> | ||
+ | |||
<code> | <code> | ||
titi grosminet | titi grosminet | ||
Ligne 1124: | Ligne 1122: | ||
====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 ) ==== |