logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

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 → ODT PDF Export

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

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:47]
Hypathie [Commandes indiquant en elle-même un adressage sed]
utilisateurs:hypathie:tutos:sed-par-la-methode-structuraliste [29/07/2014 12:29]
Hypathie [Commandes de sed supportant les adressages universaux]
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 ​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 un fichier ​passer en argument.\\ 
 + 
 +  * Méthodes d'​appel :
  
 <​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 33:
 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 dont l'​utilisation dépend des commandes ​internes de sedet 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 40: 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** :__
  
 <​code>​ <​code>​
Ligne 52: 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 90: Ligne 120:
 <note tip> <note tip>
 La possibilité d'​utiliser telle où telle option dépend de la fonction des commandes de sed.\\ ​ La possibilité d'​utiliser telle où telle option dépend de la fonction des commandes de sed.\\ ​
-Ainsi l'​option ''​-r''​ ne s'​utilisera pas avec la commande ​''​y'' ​puisque la translittération n'​utilise pas de //E.R.//\\  +Ainsi l'​option ''​-r''​ ne s'​utilisera pas avec la commande ​"y" ​puisque la translittération n'​utilise pas de //E.R.//\\  
-L'​option ''​-i''​ ne s'​utilisera qu'​avec les commandes qui transforment le flux d'​entrée,​ donc elle ne s'​utilisera pas avec les commandes de sed ''​p'',​ ''​l'',​ ''​r''​...+L'​option ''​-i''​ ne s'​utilisera qu'​avec les commandes qui transforment le flux d'​entrée,​ donc elle ne s'​utilisera pas avec les commandes de sed "p".
 </​note>​ </​note>​
  
Ligne 285: Ligne 315:
  
    
-===Adressage double ​==+=====Commandes ​de sed supportant ​les adressages ​universaux===== 
- +^        ^                 ^ 
-C'est une paire d'​adresses simples séparées par une virgule. Toutes les combinaisons sont possibles.  +|i\texte |insérer du texte | 
-  * deux numéros de ligne ''​n,​m**cmd_sed**''​ : l'​analyseur ​de sed traite ​les lignes comprises entre les deux adresses, et celles des adresses aussi.\\  +|a\texte |ajouter du texte |
-  * deux encadrements ''/​ER1/,/​ER2/''​ : l'​analyseur de sed traite les lignes délimitées par les //E.R// de début et de fin en prenant le nombre de lignes le plus large((c'​est-à-dire,​ si l'E.R. de début figure entre les deux adressages, il traite le plage la plus grande.)) +
-  * combinaison ''​n,/​ER/''​ : La plage est constituée à partir de la ligne numéro ''​n'',​ jusqu'​à la première ligne reconnue par le //E.R.// +
-  * 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==== 
-^  ^                       ^ 
-|d et D|supprimer ​ | 
-|p et P |afficher avec ''​-n''​ | 
-| = |afficher n° de ligne(s) | 
-|y/​..../​..../​ | translittération | 
-|c\texte |changement de texte| 
- 
-====Exemples ==== 
 ===Préparation === ===Préparation ===
-<code text sed-cmd>+<code text sed-automn.txt>
 automne automne
 mon bel automne mon bel automne
Ligne 321: Ligne 339:
 </​code>​ </​code>​
  
 +==="​i"​ : insertion avant la ligne d'​adressage===
  
-==="​p"​ : affichage === 
 <code user> <code user>
-sed -n '/​.*,​[[:​space:​]]/,​10p' sed-cmd+sed '1i\Ton sentiment comme atmosphère' sed-automn.txt
 </​code>​ </​code>​
-<​code>​ + 
-tes fruitsta pomme +>Le titre "Ton sentiment comme atmosphère"​ est ajouté sur la la sortie standard. 
-et le cerf, et son brame + 
-à jamais aimés+=== "​a"​ : ajout après l'​adressage=== 
 +<​code ​user
 +sed -e '1a\ ' -e '2,$s/^/ /' sed-automn.txt
 </​code>​ </​code>​
  
-==="​d"​ : suppression ​===+>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> <code user>
-sed '/tes/,10d' sed-cmd+sed -e '​1i\Ton sentiment comme atmosphère'​\ 
 + ​-e ​'/^automne/i\ '\ 
 + -e '1,$s/^/ /' ​-i sed-automn.txt
 </​code>​ </​code>​
-<​code>​ + 
-automne +>Il est à noter les adressages utilisés pour obtenir ce résultat, par rapport à ceux utilisés précédemment 
-mon bel automne +>​pour ​les exemples où les commandes i et a étaient utilisées seules. 
-dans les vergers + 
-du fond du ciel +On aurait pu utiliser pour obtenir le même résultat : 
-les éperviers ​ +<code user> 
-de l'​homme +sed -e '​1i\Ton sentiment comme atmosphère'​\ 
-en ton cheveu + -e '1i\ '\ 
-me donnent + -e '​1,​$s/​^/​ /' -i sed-automn.txt
-et des langueurs +
-et son adieu+
 </​code>​ </​code>​
-=== "​="​ numérotation===+ 
 +>Voir la prochaine note. 
 + 
 +===Résultat=== 
 +L'​option ''​-i''​ a été utilisée, le fichier "​sed-automn.txt"​ est maintenant :
 <code user> <code user>
-sed '​1,​$=' ​sed-cmd+cat sed-automn.txt
 </​code>​ </​code>​
 <​code>​ <​code>​
-1 +Ton sentiment comme atmosphère 
-automne +  
-2 + ​automne 
-mon bel automne + mon bel automne 
-3 + dans les vergers 
-dans les vergers + du fond du ciel 
-4 + les éperviers  
-du fond du ciel + de tes yeux planent 
-5 + tes feuilles 
-les éperviers ​ + tes fruits, ta pomme 
-6 + et le cerf, et son brame 
-de tes yeux planent + à jamais aimés 
-7 + de l'​homme 
-tes feuilles + en ton cheveu 
-8 + me donnent 
-tes fruits, ta pomme + et des langueurs 
-9 + et son adieu
-et le cerf, et son brame +
-10 +
-à jamais aimés +
-11 +
-de l'​homme +
-12 +
-en ton cheveu +
-13 +
-me donnent +
-14 +
-et des langueurs +
-15 +
-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__!\\ ​
  
-=== "​y" ​translittération===+Ainsi cette ligne de commandes sed :
 <code user> <code user>
-sed '2,$!y/a/A/' sed-cmd+sed -e '​1i\Ton sentiment comme atmosphère'​\ 
 + -e '2i\ '\ 
 + ​-e ​'2,$s/^/ /' sed-automn.txt
 </​code>​ </​code>​
 <​code>​ <​code>​
-Automne +Ton sentiment comme atmosphère 
-mon bel automne +automne 
-dans les vergers +  
-du fond du ciel + mon bel automne 
-les éperviers  +# J'ai supprimé le reste du retour qui ne sert pas l'explication.
-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>​ </​code>​
 +Et celle-ci :
  
-=== "​c"​ : changement de texte=== 
 <code user> <code user>
-sed -e '3,$c\ +sed -e '1i\Ton sentiment comme atmosphère'​
-fleuve Léthé+ -e '2i'
-en ton grand coeur\ + -e '​3,​$s/​^/​ /' sed-automn.txt
-devient Vestale\  +
-' sed-cmd+
 </​code>​ </​code>​
 <​code>​ <​code>​
 +Ton sentiment comme atmosphère
 automne automne
 + 
 mon bel automne mon bel automne
-fleuve Léthé + dans les vergers 
-en ton grand coeur +# J'ai supprimé le reste du retour qui ne sert pas l'​explication.
-devient Vestale+
 </​code>​ </​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>​
  
-====Commandes de sed ne supportant que les adressages simples==== +====Adressage double ​====
-^        ^                 ^ +
-|i\texte |insérer du texte | +
-|a\texte |ajouter du texte |+
  
 +C'est une paire d'​adresses simples séparées par une virgule. Toutes les combinaisons sont possibles. ​
 +  * deux numéros de ligne ''​n,​m**cmd_sed**''​ : l'​analyseur de sed traite les lignes comprises entre les deux adresses, et celles des adresses aussi.\\ ​
 +  * deux encadrements ''/​ER1/,/​ER2/''​ : l'​analyseur de sed traite les lignes délimitées par les //E.R// de début et de fin en prenant le nombre de lignes le plus large((c'​est-à-dire,​ si l'E.R. de début figure entre les deux adressages, il traite le plage la plus grande.))
 +  * combinaison ''​n,/​ER/''​ : La plage est constituée à partir de la ligne numéro ''​n'',​ jusqu'​à la première ligne reconnue par le //E.R.//
 +  * 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''​.
  
-==="i" : insertion avant la ligne d'​adressage===+====Les commandes de sed supportant les adressages universaux et l'​adressage double==== 
 +^Commandes ​ ^Significations ​  ^ 
 +|d |supprimer ​ | 
 +|p |afficher avec ''​-n''​ | 
 +| = |afficher n° de ligne(s) | 
 +|y/​..../​..../​ | translittération | 
 +|c\texte |changement de texte| 
 + 
 +===="p" : affichage ====
 <code user> <code user>
-sed -'1i\Ton sentiment comme atmosphère' sed-cmd+sed -'/​.*,​[[:​space:​]]/,​9p' sed-automn.txt
 </​code>​ </​code>​
 +<​code>​
 + tes fruits, ta pomme
 + et le cerf, et son brame
 +</​code>​
 +
 +===="​d"​ : suppression ====
 <code user> <code user>
-cat sed-cmd+sed -e '​4,​6d'​ -e '​8,​14d'​ sed-automn.txt
 </​code>​ </​code>​
 +<​code>​
 Ton sentiment comme atmosphère Ton sentiment comme atmosphère
-automne +  
-mon bel automne + ​automne 
-dans les vergers + les éperviers  
-du fond du ciel + me donnent 
-les éperviers ​ + et des langueurs 
-de tes yeux planent + et son adieu
-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>​ </​code>​
  
-=== "a" ​: ajout après l'​adressage===+==== "=" ​numérotation====
 <code user> <code user>
-sed -e '1a\ ' -e '2,$s/^/ /' ​-i sed-cmd +sed '1,$=' sed-automn.txt
-</​code>​ +
-<code user> +
-cat sed-cmd+
 </​code>​ </​code>​
 <​code>​ <​code>​
 +1
 Ton sentiment comme atmosphère Ton sentiment comme atmosphère
 +2
    
 +3
  ​automne  ​automne
 +4
  mon bel automne  mon bel automne
 +5
  dans les vergers  dans les vergers
 +6
  du fond du ciel  du fond du ciel
 +7
  les éperviers ​  les éperviers ​
 +8
  de tes yeux planent  de tes yeux planent
 +9
  tes feuilles  tes feuilles
 +10
  tes fruits, ta pomme  tes fruits, ta pomme
 +11
  et le cerf, et son brame  et le cerf, et son brame
 +12
  à jamais aimés  à jamais aimés
 +13
  de l'​homme  de l'​homme
 +14
  en ton cheveu  en ton cheveu
 +15
  me donnent  me donnent
 +16
  et des langueurs  et des langueurs
 +17
  et son adieu  et son adieu
 </​code>​ </​code>​
 +<note tip>
 +Pour n'​avoir que la numérotation,​ on peut utiliser l'​option ''​-n''​ :
  
-=====La commande ​"s"===== +<code user> 
-====Méthodes d'appel====+sed -n '=' sed-automn.txt 
 +</​code>​ 
 +</​note>​ 
 +==== "y" ​: translittération==== 
 +<code user> 
 +sed '3,​4y/​a/​A/'​ sed-automn.txt 
 +</​code>​
 <​code>​ <​code>​
-s/​motif/​substitut/​[options_de_s] fichier+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>​ </​code>​
-ou+ 
 +==== "​c"​ : changement de texte==== 
 +<code user> 
 +sed -e '​5,​$c\ 
 + ​fleuve Léthé\ 
 + en ton grand coeur\ 
 + ​devient Vestale\  
 +' sed-automn.txt 
 +</​code>​ 
 +<​code>​ 
 +Ton sentiment comme atmosphère 
 +  
 + ​automne 
 + mon bel automne 
 + ​fleuve Léthé 
 + en ton grand coeur 
 + ​devient Vestale 
 +</​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"​===== 
 +====Syntaxe globale====
 <​code>​ <​code>​
-cmd | s/​motif/​substitut/​[options_de_s]+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 506: Ligne 627:
 ====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 711: Ligne 832:
   * 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 1088: Ligne 1209:
 contenu d'un fichier créé contenu d'un fichier créé
 </​code>​ </​code>​
 +
 +=====Les commande fonctionnant en rapport avec d'​autres commandes =====
 +
 +^Commandes ​ ^Significations ​  ^
 +|N |nouvelle ligne |
 +|D |supprimer (en rapport à \n)|
 +|P |afficher (en rapport à \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.\\ ​
 +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===
 +
 +  * Sans adressage :
 +<code user>
 +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>​
 +A
 +B C
 +D
 +E
 +</​code>​
 +
 +<note tip>
 +C'est l'​inverse de ceci !
 +<code user>
 +echo "​coucou titi" | sed 's/ /\n/'
 +</​code>​
 +<​code>​
 +coucou
 +titi
 +</​code>​
 +
 +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 ) ====
 +La commande efface l'​espace de travail jusqu'​à un caractère délimitant une nouvelle ligne.\\ ​
 +On en sert en association avec la commande N pour supprimer un saut de ligne consécutif à un saut de ligne ;\\ 
 +autrement dit, pour remplacer plusieurs sauts de ligne par un seul saut de ligne.\\ ​
 +
 +===Rappel :===
 +  * ''​ /^$/ ''​ : une ligne vide
 +  * ''​ /​^\n$/''​ : une ligne comportant un saut de ligne
 +
 +===Préparation===
 +  * Soit le fichier "​sed-D.txt"​
 +<code text sed-D.txt>​
 +ligne suivie de deux sauts de ligne
 +
 +
 +fin
 +</​code>​
 +
 +===Exemple===
 +<code user>
 +sed '/​^$/​{N;/​^\n$/​D;​}'​ sed-D.txt
 +ligne suivie de deux sauts de ligne
 +
 +fin
 +</​code>​
 +
 +>la première ligne vide est matchée par /^$/ ;
 +>puis, N rend utilisable le caractère de nouvelle ligne (\n);
 +>puis D supprime de l'​espace de travail la ligne vide /^\n$/D enregistrée précédemment,​
 +>puis il passe à la ligne suivant qui est aussi une ligne vide, il fait le même travail,
 +>enfin, il passe à la ligne "​fin"​ qui ne correspond pas à /^$/, et affiche le résultat avant de sortir.
 +> Ainsi il peut supprimer ligne à ligne autant de ligne vide, afin que les les lignes du texte soit espace au plus d'un saut de ligne. ​
 +
 +====La commande P (print) ====
 +La commande "​P"​ affiche le contenu de l'​espace de travail jusqu'​au premier caractère délimitant une nouvelle ligne (\n).\\ ​
 +
 +<code user>
 +echo -e "​ligne1 ligne2 ligne3"​ | sed '{P;s/ /​\n/​g}'​
 +</​code>​
 +<​code>​
 +ligne1 ligne2 ligne3
 +ligne1
 +ligne2
 +ligne3
 +</​code> ​
 +
 +> La commande P affiche le contenu de l'​espace de travail "​ligne1 ligne2 ligne3"​ sur lequel elle applique la substitution de la fin de l'​espace en nouvelle ligne \n.
  
 ---------- ----------
 <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''​]]\\  
-et [[utilisateurs:​hypathie:​tutos:​sed-par-la-methode-structuraliste#​commandes-indiquant-en-elle-meme-un-adressage-sed|les commandes adressant en-elle-même un adressage à sed]],\\  +  *[[utilisateurs:​hypathie:​tutos:​sed-par-la-methode-structuraliste#​commandes-indiquant-en-elle-meme-un-adressage-sed|les commandes adressant en-elle-même un adressage à sed]]\\  
-utilisent principalement le mécanisme suivant :\\ +  ​*[[utilisateurs:​hypathie:​tutos:​sed-par-la-methode-structuraliste#​les-commande-fonctionnant-en-rapport-avec-d-autres-commandes |Les commande fonctionnant en rapport avec d'​autres commandes]]\\ 
 +**utilisent principalement le mécanisme suivant :**\\ 
  
 > 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"//​__ ​à partir duquel un travail ligne à ligne est effectué.
  
 __**La notion de "​pattern space"​**__\\ __**La notion de "​pattern space"​**__\\
Ligne 1112: Ligne 1332:
  
 **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>​
 +-------------
 +
 +
utilisateurs/hypathie/tutos/sed-par-la-methode-structuraliste.txt · Dernière modification: 13/11/2014 09:31 par Hypathie

Pied de page des forums

Propulsé par FluxBB