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 11:37]
Hypathie [La commande s]
utilisateurs:hypathie:tutos:sed-par-la-methode-structuraliste [28/07/2014 17:56]
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 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 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 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>​
-[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 286: 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 294: 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==== 
-^  ^                       ​+^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 323: Ligne 404:
  
  
-==="​p"​ : affichage ===+===="​p"​ : affichage ​====
 <code user> <code user>
 sed -n '/​.*,​[[:​space:​]]/,​10p'​ sed-cmd sed -n '/​.*,​[[:​space:​]]/,​10p'​ sed-cmd
Ligne 333: Ligne 414:
 </​code>​ </​code>​
  
-==="​d"​ : suppression ===+===="​d"​ : suppression ​====
 <code user> <code user>
 sed '/​tes/,​10d'​ sed-cmd sed '/​tes/,​10d'​ sed-cmd
Ligne 349: Ligne 430:
 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 386: Ligne 468:
 </​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 408: Ligne 490:
 </​code>​ </​code>​
  
-=== "​c"​ : changement de texte===+==== "​c"​ : changement de texte====
 <code user> <code user>
 sed -e '3,$c\ sed -e '3,$c\
Ligne 424: Ligne 506:
 </​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 547: Ligne 572:
 ^  ^  ^ ^  ^  ^
 |g | global : toutes les occurrences | |g | global : toutes les occurrences |
-|écrire les substitutions effectuées dans un fichier ​|+|la nième occurrence d'une ligne |
 |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 | |I | ignorer la casse |
 |M | correspondance de E.R.\\ (implémentation GNU, non portable) | |M | correspondance de E.R.\\ (implémentation GNU, non portable) |
 +
 +===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==== ====Les indicateurs spéciaux====
Ligne 973: Ligne 1100:
 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 994: Ligne 1125:
 > 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 1007: Ligne 1138:
  
 **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