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 17:59]
Hypathie [Commandes indiquant en elle-même un adressage sed]
utilisateurs:hypathie:tutos:sed-par-la-methode-structuraliste [29/07/2014 06:41]
Hypathie [Introduction]
Ligne 20: Ligne 20:
 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 ...))\\ ​ 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]\ +cmd[cat|echo|ls|...] ​[fichier[repertoire]]\ 
- | sed [options] cmd_de_sed+ | sed [options] cmd_de_sed ​
 </​code>​ </​code>​
 ou ou
Ligne 65: 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** :__
Ligne 77: 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 115: 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 508: Ligne 513:
  
 =====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 533:
 ====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 738:
   * 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 1125:
 ====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
-+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 ) ====
Ligne 1199: Ligne 1217:
 <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''​]]\\  
-[[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]]\\  
-[[ |Les commande fonctionnant en rapport avec d'​autres commandes ]] +  *[[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 :\\ +**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 ​(ligne à ligne) ​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"​**__\\
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