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 [27/07/2014 16:30]
Hypathie [La commande s]
utilisateurs:hypathie:tutos:sed-par-la-methode-structuraliste [28/07/2014 12:47]
Hypathie [Commandes indiquant en elle-même un adressage sed]
Ligne 45: Ligne 45:
  
 <​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 484:
 ====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 506:
 ====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 542:
  
  
-===Les 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 809: Ligne 911:
 </​code>​ </​code>​
  
-=====sed : commande d'​adressage et script ​avancé=====+=====Commandes indiquant en elle-même un adressage ​sed===== 
 + 
 +==== # Commentaire (Aucune adresse autorisée)==== 
 +Le caractère ''#''​ (dièse) commence un commentaire et ce jusqu'​à la fin de la ligne.\\  
 +Dans un script sed, il peut se trouver sur la même ligne qu'​une ​commande, elle ne sera prise pour un commantaire.\\  
 +Si les deux premiers caractères ​d'un script sed sont "#​n",​ l'​option "​-n"​ (no-autoprint) est alors forcée. 
 + 
 +====q quit : Quitter (une adresse autorisée)==== 
 +Cette commande permet de quitter sed après le travail sur l'​adressage ​en cours d'​exécution.\\  
 +Elle est utile quand on utilise sed sur de gros fichiers.\\  
 + 
 +===Exemple sans commande "​q"​=== 
 +reprise du "​sed-automn.txt" ​et script1 contenant : 
 +<​code>​ 
 +4,5p 
 +8!d 
 +</​code>​ 
 +<code user> 
 +sed -f script1 sed-automn.txt 
 +</​code>​ 
 +<​code>​  
 + mon bel automne 
 + dans les vergers 
 + de tes yeux planent 
 +</​code>​ 
 + 
 +> Dans ce cas, sed affiche de la ligne 4 à la ligne 5.  
 +> Puis la commande d supprime tout sauf les lignes de p et la ligne traitée par d. 
 + 
 +===Utilisation de la commande ''​q''​=== 
 +Reprise du fichier "​sed-automn.txt"​ et script2 contenant : 
 +<​code>​ 
 +# 4,5p 
 +# 8!d 
 + 
 +6q;​4,​5p;​8!d 
 +</​code>​ 
 + 
 +<code user> 
 +sed -nf script2 sed-automn.txt 
 +</​code>​ 
 +<​code>​ 
 + mon bel automne 
 + dans les vergers 
 +</​code>​ 
 + 
 +> Dans ce cas, la commande q adresse les 6 premières lignes dans la mémoire principale de sed, qui peut alors les utiliser une fois, donc pour une seule commande après q. 
 +> En effet, si l'​adressage de la commande suivante "​déborde"​ de celui de la commande q, alors sed affiche la ligne que la commande q a adressé à la mémoire principale. 
 + 
 +<​code>​ 
 +sed '​2q;​4,​5p'​ sed-automn.txt 
 +</​code>​ 
 +<​code>​ 
 +Ton sentiment comme atmosphère 
 +#la deuxième ligne est une ligne vide 
 +</​code>​ 
 + 
 +> Utiliser sans adressage elle affiche la première ligne du fichier ; sed enregistre au moins une ligne pour traiter une commande sans adressage du fichier. 
 + 
 +====la commande n (next-line ) ==== 
 +À ne pas confondre avec l'​option de la ligne de commande sed.\\  
 +La commande ''​n''​ déplace l'​adressage de l'​espace de travail d'une ligne. 
 + 
 +===Affichage de lignes sans la commande n === 
 +<code user> 
 +echo -e "​1A\n2B\n3C"​ | sed -ne '​2p'​ 
 +</​code>​ 
 +<​code>​ 
 +2B 
 +</​code>​ 
 + 
 +=== Affichage de lignes avec la commande n=== 
 +   * adressage simple : 
 +<code user> 
 +echo -e "​1A\n2B\n3C"​ | sed -n '2 {n;​p}'​ 
 +</​code>​ 
 +<​code>​ 
 +3C 
 +</​code>​ 
 + 
 +  * adressage double : 
 +<code user> 
 +echo -e "​1A\n2B\n3C\n3D"​ | sed -n '1,3 {n;​p}'​ 
 +</​code>​ 
 +<​code>​ 
 +2B 
 +3D 
 +</​code>​ 
 + 
 +====la commande {  } ==== 
 +Elle permet d'​indiquer un seul adressage pour plusieurs commandes.\\  
 + 
 +  * Elle s'​utilise en ligne de commande voir l'​exemple de la commande précédemment considérée ; 
 + 
 +  sed [options] '/​adressage/​ {cmd1;​cmd2;​...}'​ 
 + 
 +  * Elle s'​utilise aussi dans un script ​sed ; 
 +<​code>​ 
 +adressage{ 
 +  cmd1 
 +  cmd2 
 +  ... 
 +
 +</​code>​ 
 + 
 +  * Elle permet l'​imbrication d'​adressage ; 
 +<​code>​ 
 +adressage1{ 
 +  adressage1A cmd1A 
 +  adressage1B cmd1B 
 +  ... 
 +  adressage2{ 
 +  cmd2A cmd2A 
 +    ... 
 +  } 
 +
 +</​code>​ 
 + 
 +====La commande r "​fichier lu" (read) ​==== 
 +Elle adresse à sed un fichier et l'​insère dans le fichier de destination. ​  
 + 
 +  sed '/​adressage-pour fichier-modifié/​ r fichier-mofifié 
 + 
 +Il ne doit y avoir qu'un seul espace entre la commande et le nom du "​fichier lu".\\  
 +Il faut donner le chemin absolu du "​fichier lu" 
 + si le terminal ne se trouve dans le répertoire parent de ce "​fichier lu". 
 +===Préparation=== 
 +  * soit le fichier "​sed-fich-lu.txt"​ : 
 +<​code>​ 
 +texte du fichier lu 
 +deuxième ligne 
 +</​code>​ 
 +  * soit le fichier "​sed-coincoin.txt"​ : 
 +<​code>​ 
 +coin 
 +coin 
 +foobar 
 +barbar 
 +</​code>​ 
 + 
 +===Ajouter le contenu de "​sed-fich-lu.txt"​ dans "​sed-coincoin.txt"​=== 
 +<code user> 
 +sed '1,3r sed-fich-lu.txt'​ sed-coincoin.txt 
 +</​code>​ 
 +<​code>​ 
 +coin 
 +texte du fichier lu 
 +deuxième ligne fichier lu 
 +coin 
 +texte du fichier lu 
 +deuxième ligne fichier lu 
 +foobar 
 +texte du fichier lu 
 +deuxième ligne fichier lu 
 +barbar 
 +</​code>​ 
 + 
 +====La commande w fichier ( write ) ==== 
 +Écrit la ligne en cours de traitement dans le fichier spécifié à la suite de la commande "​w"​.\\  
 +Le fichier sera créé, même si le traitement est nul en sortie.\\  
 +Tout comme la commande "​r"​ (lecture), il ne doit y avoir qu'un seul espace entre la commande et le nom du fichier à créer.\\  
 +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. 
 + 
 +===créer un fichier avec sed et echo :=== 
 +<code user> 
 +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>​ 
 +contenu d'un fichier créé 
 +</​code>​ 
 + 
 +---------- 
 +<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.  
 +> 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"//​__. 
 + 
 +__**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>​
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