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 16:50]
Hypathie [Commandes indiquant en elle-même un adressage sed]
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 310: Ligne 312:
  
    
-===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 318: Ligne 378:
   * 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==== 
-^  ^                       ​+^Commandes ​ ^Significations ​  
-|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 347: Ligne 406:
  
  
-==="​p"​ : affichage ===+===="​p"​ : affichage ​====
 <code user> <code user>
 sed -n '/​.*,​[[:​space:​]]/,​10p'​ sed-cmd sed -n '/​.*,​[[:​space:​]]/,​10p'​ sed-cmd
Ligne 357: Ligne 416:
 </​code>​ </​code>​
  
-==="​d"​ : suppression ===+===="​d"​ : suppression ​====
 <code user> <code user>
 sed '/​tes/,​10d'​ sed-cmd sed '/​tes/,​10d'​ sed-cmd
Ligne 373: Ligne 432:
 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 410: Ligne 470:
 </​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 432: Ligne 492:
 </​code>​ </​code>​
  
-=== "​c"​ : changement de texte===+==== "​c"​ : changement de texte====
 <code user> <code user>
 sed -e '3,$c\ sed -e '3,$c\
Ligne 448: Ligne 508:
 </​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"​=====
-====Méthodes d'​appel==== +====Syntaxe globale====
-<​code>​ +
-s/​motif/​substitut/​[options_de_s] fichier +
-</​code>​ +
-ou+
 <​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 531: 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 736: 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 1114: Ligne 1113:
 </​code>​ </​code>​
  
----------- +=====Les commande fonctionnant ​en rapport avec d'autres ​commandes ​=====
-<note tip> +
-**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#​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]],\\  +
-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. ​ +^Commandes ​ ^Significations ​  ^ 
-> 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,\\ +|N |nouvelle ​ligne | 
-> Puis l'​espace de travail est effacé ; +|D |supprimer ​(en rapport ​à \n)| 
-> Autrement dit, __leur fonctionnement se base sur une utilisation simple du //"​pattern space"//​__. +||afficher ​(en rapport ​à \n|
- +
-__**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 ​ :**  +
-  * Les commandes multi-lignes (N,D,P+
-  * Les commandes utilisant la mémoire annexe ​(h,​H,​g,​G,​x) +
-  * Les commandes de tests faisant appel à des étiquettes (:,b,t,T) +
-</​note>​ +
--------------+
  
 ====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>
 +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> <code user>
-echo -e "​A\nB\nC\nD\nE"​ | sed '{N;s/B/X/}'+echo -e "​A\nB\nC\nD\nE"​ | sed '/B/{N;s/\n/ /}'
 </​code>​ </​code>​
 <​code>​ <​code>​
 A A
-+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'​espacesdonc 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 ) ====
 La commande efface l'​espace de travail jusqu'​à un caractère délimitant une nouvelle ligne.\\ ​ 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 ;\\  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.+autrement dit, pour remplacer plusieurs sauts de ligne par un seul saut de ligne.\\  
 ===Rappel :=== ===Rappel :===
   * ''​ /^$/ ''​ : une ligne vide   * ''​ /^$/ ''​ : une ligne vide
Ligne 1203: Ligne 1198:
 ====La commande P (print) ==== ====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).\\ ​ 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>
 +**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#​la-commande-s|la commande ''​s''​]]\\ ​
 +  *[[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#​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. ​
 +> 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é ;\\ 
 +> 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"​**__\\
 +
 +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 ​ :** 
 +  * Les commandes utilisant la mémoire annexe (h,H,g,G,x)
 +  * Les commandes de tests faisant appel à des étiquettes (:,b,t,T)
 +</​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