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 12:41] Hypathie [La commande s] |
utilisateurs:hypathie:tutos:sed-par-la-methode-structuraliste [28/07/2014 17:30] Hypathie [Commandes indiquant en elle-même un adressage sed] |
||
---|---|---|---|
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> | ||
Ligne 285: | Ligne 310: | ||
- | ===Adressage double === | + | =====Commandes de sed supportant les adressages universaux===== |
+ | ^ ^ ^ | ||
+ | |i\texte |insérer du texte | | ||
+ | |a\texte |ajouter du texte | | ||
+ | |||
+ | |||
+ | ==="i" : insertion avant la ligne d'adressage=== | ||
+ | <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 | ||
+ | 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> | ||
+ | |||
+ | === "a" : ajout après l'adressage=== | ||
+ | <code user> | ||
+ | sed -e '1a\ ' -e '2,$s/^/ /' -i sed-cmd | ||
+ | </code> | ||
+ | <code user> | ||
+ | cat sed-cmd | ||
+ | </code> | ||
+ | <code> | ||
+ | Ton sentiment comme atmosphère | ||
+ | |||
+ | 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> | ||
+ | |||
+ | ====Adressage double ==== | ||
C'est une paire d'adresses simples séparées par une virgule. Toutes les combinaisons sont possibles. | C'est une paire d'adresses simples séparées par une virgule. Toutes les combinaisons sont possibles. | ||
Ligne 293: | Ligne 376: | ||
* combinaison ''/ER/,n'' : La plage est constituée à partir de la première ligne vérifiant l'expression régulière jusqu'à la ligne de numéro ''n''. | * combinaison ''/ER/,n'' : La plage est constituée à partir de la première ligne vérifiant l'expression régulière jusqu'à la ligne de numéro ''n''. | ||
- | ====Les commandes de sed supportant les adressages universaux==== | + | ====Les commandes de sed supportant les adressages universaux et l'adressage double==== |
^ ^ ^ | ^ ^ ^ | ||
- | |d et D|supprimer | | + | |d |supprimer | |
- | |p et P |afficher avec ''-n'' | | + | |p |afficher avec ''-n'' | |
| = |afficher n° de ligne(s) | | | = |afficher n° de ligne(s) | | ||
|y/..../..../ | translittération | | |y/..../..../ | translittération | | ||
|c\texte |changement de texte| | |c\texte |changement de texte| | ||
- | ====Exemples ==== | + | |
===Préparation === | ===Préparation === | ||
<code text sed-cmd> | <code text sed-cmd> | ||
Ligne 322: | Ligne 405: | ||
- | ==="p" : affichage === | + | ===="p" : affichage ==== |
<code user> | <code user> | ||
sed -n '/.*,[[:space:]]/,10p' sed-cmd | sed -n '/.*,[[:space:]]/,10p' sed-cmd | ||
Ligne 332: | Ligne 415: | ||
</code> | </code> | ||
- | ==="d" : suppression === | + | ===="d" : suppression ==== |
<code user> | <code user> | ||
sed '/tes/,10d' sed-cmd | sed '/tes/,10d' sed-cmd | ||
Ligne 348: | Ligne 431: | ||
et son adieu | et son adieu | ||
</code> | </code> | ||
- | === "=" numérotation=== | + | |
+ | ==== "=" numérotation==== | ||
<code user> | <code user> | ||
sed '1,$=' sed-cmd | sed '1,$=' sed-cmd | ||
Ligne 385: | Ligne 469: | ||
</code> | </code> | ||
- | === "y" : translittération=== | + | ==== "y" : translittération==== |
<code user> | <code user> | ||
sed '2,$!y/a/A/' sed-cmd | sed '2,$!y/a/A/' sed-cmd | ||
Ligne 407: | Ligne 491: | ||
</code> | </code> | ||
- | === "c" : changement de texte=== | + | ==== "c" : changement de texte==== |
<code user> | <code user> | ||
sed -e '3,$c\ | sed -e '3,$c\ | ||
Ligne 423: | Ligne 507: | ||
</code> | </code> | ||
- | ====Commandes de sed ne supportant que les adressages simples==== | ||
- | ^ ^ ^ | ||
- | |i\texte |insérer du texte | | ||
- | |a\texte |ajouter du texte | | ||
- | |||
- | ==="i" : insertion avant la ligne d'adressage=== | ||
- | <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 | ||
- | 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> | ||
- | |||
- | === "a" : ajout après l'adressage=== | ||
- | <code user> | ||
- | sed -e '1a\ ' -e '2,$s/^/ /' -i sed-cmd | ||
- | </code> | ||
- | <code user> | ||
- | cat sed-cmd | ||
- | </code> | ||
- | <code> | ||
- | Ton sentiment comme atmosphère | ||
- | |||
- | 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> | ||
=====La commande "s"===== | =====La commande "s"===== | ||
Ligne 1074: | Ligne 1102: | ||
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 1095: | Ligne 1127: | ||
> 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 d'une ligne de commande sed est atteinte, la ligne enregistrée et travaillée est alors envoyée sur la sortie standard,\\ | > 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,\\ | ||
- | > Puis l'espace de travail est effacé; | + | > Puis l'espace de travail est effacé ; |
> Autrement dit, __leur fonctionnement se base sur une utilisation simple du //"pattern space"//__. | > Autrement dit, __leur fonctionnement se base sur une utilisation simple du //"pattern space"//__. | ||
Ligne 1108: | Ligne 1140: | ||
**Il reste à présenter :** | **Il reste à présenter :** | ||
- | * 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> | ||
+ | ------------- | ||
+ | |||
+ |