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 10:52] Hypathie [Commandes indiquant en elle-même un adressage sed] |
utilisateurs:hypathie:tutos:sed-par-la-methode-structuraliste [28/07/2014 13:14] Hypathie [Introduction] |
||
---|---|---|---|
Ligne 18: | Ligne 18: | ||
L'éditeur de flux sed est lancé en ligne de commandes avec la commande sed.\\ | L'éditeur de flux sed est lancé en ligne de commandes avec la commande sed.\\ | ||
- | Il ne faut pas confondre la commande sed reconnue par le shell (qui lance le programme sed) avec les commandes internes du programme sed.\\ | + | 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 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.\\ |
<code> | <code> | ||
- | cmd[cat|echo|ls|...] fichier[repertoire] | sed [options] cmd_de_sed | + | cmd[cat|echo|ls|...] fichier[repertoire]\ |
+ | | sed [options] cmd_de_sed | ||
</code> | </code> | ||
ou | ou | ||
Ligne 30: | Ligne 31: | ||
sed [options] cmd_de_sed fichier | sed [options] cmd_de_sed fichier | ||
</code> | </code> | ||
+ | |||
+ | En tant que commande lancée par le shell, sed possède des options : | ||
+ | |||
+ | * Les options sans implication avec les commandes internes de sed | ||
+ | |||
+ | ^ Options ^ Signification ^ | ||
+ | |'' --posix '' |Désactiver toutes les extensions GNU| | ||
+ | |''-u'', ''--unbuffered'' |Charger des quantités minimales de données\\ depuis les fichiers d'entrée\\ et libérer les tampons de sortie plus souvent| | ||
+ | |''--help'' |Afficher cette aide et sortir | | ||
+ | |''--version'' |Afficher les informations de version du logiciel | | ||
+ | |||
+ | * Les options sensibles aux commandes internes de sed | ||
+ | |||
+ | ^options ^significations ^ | ||
+ | |''-e'' |enchaîner plusieurs commandes | | ||
+ | |''-r'' |utiliser les expressions régulières étendues dans un script | | ||
+ | |''-n'' |mode silencieux : permet de ne rien modifier\\ associée au drapeau p (print)\\ (affichage sur la sortie standard) | | ||
+ | |''-f'' |Les commandes sont lues à partir d'un fichier préalablement rédigé. | | ||
+ | |''-i'' |Le fichier est édité sur place.| | ||
+ | |||
+ | |||
+ | |||
<note tip> | <note tip> | ||
+ | __**"Options sensibles"**__\\ | ||
- | -Les options concernent la ligne de commandes du programme sed et non les commandes de sed. | + | -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 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. |
+ | |||
En effet, la syntaxe de l'adressage et le choix des options dépendent du choix des commandes internes.\\ | En effet, la syntaxe de l'adressage et le choix des options dépendent du choix des commandes internes.\\ | ||
Ligne 42: | Ligne 67: | ||
3) toutes les commandes internes ne sont pas toutes associables entre elles. | 3) toutes les commandes internes ne sont pas toutes associables entre elles. | ||
- | __Cette grammaire se résume ainsi :__ | + | __**Cette grammaire se résume ainsi** :__ |
<code> | <code> | ||
- | [options] /adressage/cmd_de_sed [options_cmd_de_sed] | + | sed [-n [-e commande] [-f script] [-i[.extension]]\ |
+ | [l [cesure]] rsu] [<commande>] [<fichier(s)>] | ||
</code> | </code> | ||
- | |||
- | //Ce que j'appelle là "options_cmd_de_sed" est appelé selon la documentation "drapeaux", ou "options", ou encore "indicateur". Elle dépend de la connaissance des commandes de sed.// | ||
-> La compréhension de la documentation et le fonctionnement global de sed sont facilités lorsque l'on maîtrise un double rapport d'implications :\\ | -> La compréhension de la documentation et le fonctionnement global de sed sont facilités lorsque l'on maîtrise un double rapport d'implications :\\ | ||
Ligne 485: | Ligne 509: | ||
====Méthodes d'appel==== | ====Méthodes d'appel==== | ||
<code> | <code> | ||
- | s/motif/substitut/[options_cmd_de_sed] fichier | + | s/motif/substitut/[options_de_s] fichier |
</code> | </code> | ||
ou | ou | ||
<code> | <code> | ||
- | cmd | s/motif/substitut/[options_cmd_de_sed] | + | cmd | s/motif/substitut/[options_de_s] |
</code> | </code> | ||
Ligne 507: | Ligne 531: | ||
====Détail : la ligne de commande "s"==== | ====Détail : la ligne de commande "s"==== | ||
<code c> | <code c> | ||
- | s/expression1/expression2/[options_cmd_de_sed] | + | s/expression1/expression2/[options_de_s] |
</code> | </code> | ||
===les séparateurs ( / )=== | ===les séparateurs ( / )=== | ||
Ligne 543: | Ligne 567: | ||
- | ===détail : options-cmd-de-sed=== | + | ====Détail : "options-de-s" ("flags")==== |
^ ^ ^ | ^ ^ ^ | ||
|g | global : toutes les occurrences | | |g | global : toutes les occurrences | | ||
- | |\n| indicateur de sous-chaîne| | + | |n | la nième occurrence d'une ligne | |
- | |w | écrire les modifications effectuées dans un fichier | | + | |
|p | afficher la ligne modifiée | | |p | afficher la ligne modifiée | | ||
+ | |w | écrire les substitutions effectuées dans un fichier | | ||
|e | exécution d'une commande | | |e | exécution d'une commande | | ||
+ | |I | ignorer la casse | | ||
+ | |M | correspondance de E.R.\\ (implémentation GNU, non portable) | | ||
- | ===Les indicateurs spéciaux=== | + | ===g ; n et p === |
+ | * substituer toutes les occurrences de motif | ||
+ | <code text sed-coincoin.txt> | ||
+ | coin | ||
+ | coin | ||
+ | foobar | ||
+ | barbar | ||
+ | coincoin babar coincoin | ||
+ | </code> | ||
+ | |||
+ | <code user> | ||
+ | sed 's/coincoin//g' sed-coincoin.txt | ||
+ | </code> | ||
+ | <code> | ||
+ | coin | ||
+ | coin | ||
+ | foobar | ||
+ | barbar | ||
+ | babar | ||
+ | </code> | ||
+ | > Sans ''g'', seul le "coincoin" à gauche de "babar" aurait été substitué par un espace. | ||
+ | |||
+ | * Substituer l'occurrence d'une ligne | ||
+ | |||
+ | <code user> | ||
+ | sed '/babar/s/coin//3' sed-coincoin.txt | ||
+ | </code> | ||
+ | <code> | ||
+ | coin | ||
+ | coin | ||
+ | foobar | ||
+ | barbar | ||
+ | coincoin babar coin | ||
+ | </code> | ||
+ | |||
+ | * Afficher sur la sortie standard la substitution : | ||
+ | <code user> | ||
+ | var="ligne1\nligne2\nligne3\nligne\nligne5" | ||
+ | </code> | ||
+ | <code user> | ||
+ | echo -e "$var" | sed '4 s/e/e4/p' | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | ligne1 | ||
+ | ligne2 | ||
+ | ligne3 | ||
+ | ligne4 | ||
+ | ligne4 | ||
+ | ligne5 | ||
+ | </code> | ||
+ | |||
+ | > Le doublon est dû à l'affichage du cache, auquel s'ajoute l'affichage de la substitution. | ||
+ | > Il faut utiliser l'option sed -n : | ||
+ | |||
+ | <code user>echo -e "$var" | sed -n '4 s/e/e4/p'</code> | ||
+ | |||
+ | ligne4 | ||
+ | |||
+ | === w écrire=== | ||
+ | <code user> | ||
+ | sed -n 's/barbar/babar/pw fichier-barbar' sed-coincoin.txt | ||
+ | </code> | ||
+ | <code> | ||
+ | babar | ||
+ | </code> | ||
+ | <code user> | ||
+ | cat fichier-barbar | ||
+ | </code> | ||
+ | <code> | ||
+ | babar | ||
+ | </code> | ||
+ | |||
+ | === e : exécution d'une commande=== | ||
+ | <code user> | ||
+ | sed 's/barbar/date/e' sed-coincoin.txt | ||
+ | </code> | ||
+ | <code> | ||
+ | coin | ||
+ | coin | ||
+ | foobar | ||
+ | lundi 28 juillet 2014, 12:32:20 (UTC+0200) | ||
+ | coincoin babar coincoin | ||
+ | </code> | ||
+ | |||
+ | ===I : ignorer la casse === | ||
+ | <code user> | ||
+ | var="COINcoin\nbabar\ncoinCOIN\nbabar\ncoincoin" | ||
+ | </code> | ||
+ | <code user> | ||
+ | echo -e "$var" | sed 's/coincoin/tointoin/Ig' | ||
+ | </code> | ||
+ | <code> | ||
+ | tointoin | ||
+ | babar | ||
+ | tointoin | ||
+ | babar | ||
+ | tointoin | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ====Les indicateurs spéciaux==== | ||
^ ^ ^ | ^ ^ ^ | ||
|&|chaîne à remplacer| | |&|chaîne à remplacer| | ||
Ligne 972: | Ligne 1099: | ||
Si un fichier du même nom existe déjà, il sera écrasé sans avertissement ni confirmation et ce à chaque invocation du script.\\ | Si un fichier du même nom existe déjà, il sera écrasé sans avertissement ni confirmation et ce à chaque invocation du script.\\ | ||
Si plusieurs instructions de la commande "w" sont appelées à écrire dans un même fichier depuis un script, chaque écriture est ajoutée à la fin du fichier. | Si plusieurs instructions de la commande "w" sont appelées à écrire dans un même fichier depuis un script, chaque écriture est ajoutée à la fin du fichier. | ||
- | |||
- | ====Exemples==== | ||
===créer un fichier avec sed et echo :=== | ===créer un fichier avec sed et echo :=== | ||
<code user> | <code user> | ||
echo "contenu d'un fichier créé" | sed 'w fichier-sed-cree' | echo "contenu d'un fichier créé" | sed 'w fichier-sed-cree' | ||
+ | </code> | ||
+ | <code> | ||
+ | contenu d'un fichier créé | ||
+ | </code> | ||
+ | <code user> | ||
+ | cat fichier-sed-cree | ||
</code> | </code> | ||
<code> | <code> | ||
Ligne 985: | Ligne 1116: | ||
---------- | ---------- | ||
<note tip> | <note tip> | ||
- | Toutes commandes présentées jusqu'ici,\\ | + | **Toutes commandes présentées jusqu'ici,**\\ |
[[utilisateurs:hypathie:tutos:sed-par-la-methode-structuraliste#les-commandes-de-sed-supportant-les-adressages-universaux|celles regroupées en fonction des adressages universaux]],\\ | [[utilisateurs:hypathie:tutos:sed-par-la-methode-structuraliste#les-commandes-de-sed-supportant-les-adressages-universaux|celles regroupées en fonction des adressages universaux]],\\ | ||
[[utilisateurs:hypathie:tutos:sed-par-la-methode-structuraliste#la-commande-s|la commande ''s'']],\\ | [[utilisateurs:hypathie:tutos:sed-par-la-methode-structuraliste#la-commande-s|la commande ''s'']],\\ | ||
Ligne 992: | Ligne 1123: | ||
> Lecture d'une ligne du fichier d'entrée dans l'espace de travail à laquelle est appliquée chaque commande du script séquentiellement. | > Lecture d'une ligne du fichier d'entrée dans l'espace de travail à laquelle est appliquée chaque commande du script séquentiellement. | ||
- | > Lorsque la fin du script est atteinte, la ligne est alors envoyée sur la sortie standard, l'espace de travail est effacé; | + | > Lorsque la fin d'une ligne de commande sed est atteinte, la ligne enregistrée et travaillée est alors envoyée sur la sortie standard,\\ |
- | > une nouvelle ligne est lue en entrée et le contrôle est passée à nouveau au début du script. | + | > Puis l'espace de travail est effacé; |
+ | > Autrement dit, __leur fonctionnement se base sur une utilisation simple du //"pattern space"//__. | ||
+ | |||
+ | __**La notion de "pattern space"**__\\ | ||
+ | |||
+ | C'est __la mémoire principale (tampon)__ qui permet à sed de travailler ; on la nomme aussi "espace de travail". C'est là que sont enregistrées les données.\\ | ||
+ | |||
+ | Mais sed possède __deux sortes de mémoire tampon__. La __deuxième est appelée "espace annexe" ou "hold space"__.\\ | ||
+ | Cette dernière est un espace mémoire où les données (la ou les ligne(s)) peuvent être enregistrées provisoirement.\\ | ||
+ | Certaines commandes permettent de modifier l'adressage des lignes tel qu'il est enregistré dans l'une de ces mémoires.\\ | ||
+ | D'autres, permettent aussi un échange de données d'une mémoire à l'autre.\\ | ||
- | Il reste à présenter : | + | **Il reste à présenter :** |
* Les commandes multi-lignes (N,D,P) | * Les commandes multi-lignes (N,D,P) | ||
* Les commandes utilisant la mémoire annexe (h,H,g,G,x) | * Les commandes utilisant la mémoire annexe (h,H,g,G,x) | ||
* Les commandes de tests faisant appel à des étiquettes (:,b,t,T) | * Les commandes de tests faisant appel à des étiquettes (:,b,t,T) | ||
</note> | </note> |