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
utilisateurs:hypathie:tutos:sed-par-la-methode-structuraliste [29/07/2014 06:47]
Hypathie [Introduction]
utilisateurs:hypathie:tutos:sed-par-la-methode-structuraliste [13/11/2014 09:31] (Version actuelle)
Hypathie [sed par la méthode structuraliste]
Ligne 11: Ligne 11:
 Michel Foucault Michel Foucault
  
 +
 +===Références===
 +
 +  * Illustration de man sed : [[http://​www.scotchlinux.tuxfamily.org/​doc/​sed.php]]
 +  * Exemples d'​utilisation : [[http://​www.system-linux.eu/​index.php?​post/​2008/​12/​21/​La-commande-Sed]]
 =====Introduction ===== =====Introduction =====
  
Ligne 21: Ligne 26:
  
 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.\\ ​ 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 ​passer ​en argument.\\+Le flux d'​entrée peut être ce qui lui est transmis par un pipe en ligne de commandes ou par un fichier ​donné ​en argument.\\
  
   * Méthodes d'​appel :   * Méthodes d'​appel :
Ligne 48: Ligne 53:
 ^options ^significations ^ ^options ^significations ^
 |''​-e''​ |enchaîner plusieurs commandes | |''​-e''​ |enchaîner plusieurs commandes |
-|''​-r''​ |utiliser les expressions régulières étendues dans un script |+|''​-r''​ |utiliser les [[utilisateurs:​hypathie:​tutos:​sed-et-les-expressions-rationnelles|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) | |''​-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é. | |''​-f''​ |Les commandes sont lues à partir d'un fichier préalablement rédigé. |
Ligne 60: Ligne 65:
 -J'​appelle "​options sensibles"​ celles dont l'​utilisation dépend des commandes internes de sed, et dont l'​usage réclame une connaissance de la "​grammaire"​ de sed. -J'​appelle "​options sensibles"​ celles dont l'​utilisation dépend des commandes internes de sed, et 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 ​globale ​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 125: Ligne 130:
  
 === Options -i avec -r , -n , -e  === === Options -i avec -r , -n , -e  ===
-Lorsqu'​on a besoin d'​adresser au moyen d'​une ​//​E.R.// ​étendue, et de modifier réellement,​ il faut associer les options ''​-r''​ et ''​-i''​.\\+Lorsqu'​on a besoin d'​adresser au moyen d'​une ​[[utilisateurs:​hypathie:​tutos:​sed-et-les-expressions-rationnelles|expression régulière ​étendue]], et de modifier réellement,​ il faut associer les options ''​-r''​ et ''​-i''​.\\
 La syntaxe est toujours ''​-ri''​ , et non pas -ir.\\ ​ La syntaxe est toujours ''​-ri''​ , et non pas -ir.\\ ​
 On peut associer d'​autres options, après ''​-ri''​ On peut associer d'​autres options, après ''​-ri''​
Ligne 151: Ligne 156:
 </​code>​ </​code>​
  
->Cette option permettant l'​utilisation de script sed, elle va donc influer sur la grammaire globale ​de sed.\\ Les commandes internes de sed doivent être inscrites dans le script, ce qui influe sur la syntaxe d'​appel des commandes internes. L'​utilisation du tampon n'​étant plus le même avec l'​utilisation d'un script sed, l'​effet de l'​option ''​-n''​ va changer.\\+<note tip> 
 +Cette option permettant l'​utilisation de script sed, va donc influer sur la possibilité d'​utiliser conjointement d'​autres options ​de sed.\\ Les commandes internes de sed doivent être inscrites dans le script, ce qui influe sur la syntaxe d'​appel des commandes internes. L'​utilisation du tampon n'​étant plus la même avec l'​utilisation d'un script sed, l'​effet de l'​option ''​-n''​ va changer.\\
    
 //Elle implique aussi la possibilité d'​utiliser les commandes de sed mises au point principalement pour l'​usage de scripts sed.\\ (Voir la troisième partie "​scripts sed avancés"​)//​ //Elle implique aussi la possibilité d'​utiliser les commandes de sed mises au point principalement pour l'​usage de scripts sed.\\ (Voir la troisième partie "​scripts sed avancés"​)//​
 +</​note>​
  
   * __**Éléments de syntaxe d'un script sed :**__   * __**Éléments de syntaxe d'un script sed :**__
Ligne 206: Ligne 213:
 /​([[:​digit:​]].){3}[[:​digit:​]]@lo/​a\bizarre ce Nono /​([[:​digit:​]].){3}[[:​digit:​]]@lo/​a\bizarre ce Nono
 </​code>​ </​code>​
->Dès lors qu'on utilise l'​option ''​-f'',​ l'​option ''​-e''​ n'est plus utilisable puisque le script enchaîne les commandes en les plaçant chacune sur une ligne ; 
->Mais l'​option ''​-r''​ doit être utilisable puisqu'​il peut y avoir dans le script sed une commande dont l'​adressage est une //E.R.// étendue. 
->De même l'​option ''​-i''​ doit être utilisable puisque un script sed doit servir à modifier un fichier texte !\\  
  
-Ainsi :+<note tip> 
 +Dès lors qu'on utilise l'​option ''​-f'',​ l'​option ''​-e''​ n'est plus utilisable puisque le script enchaîne les commandes en les plaçant chacune sur une ligne.\\  
 +Mais l'​option ''​-r''​ doit être utilisable puisqu'​il peut y avoir dans le script sed une commande dont l'​adressage est une //E.R.// étendue.\\  
 + 
 +De même l'​option ''​-i''​ doit être utilisable puisque un script sed doit servir à modifier un fichier texte !\\  
 +Cela se fait ainsi :
 <code user> <code user>
 sed -rf script2-sed -i sed-options sed -rf script2-sed -i sed-options
 </​code>​ </​code>​
 +</​note>​
 __Pour visualiser, utilisation d'une commande d'​affichage ( **cat** par exemple)__ même si ''​-n''​ n'a pas été utilisée((Lors de l'​utilisation d'un script sed sur un fichier, pour ce qui concerne les commandes d'​insertion (''​i''​),​ d'​ajout (''​a''​) et de changement (''​c''​),​ fort heureusement,​ par défaut, l'​affichage sur la sortie standard du tampon de travail de sed est annulé.\\ Ce n'est bien sûr pas le cas pour la commande de suppression ''​-s''​.))\\ ​ __Pour visualiser, utilisation d'une commande d'​affichage ( **cat** par exemple)__ même si ''​-n''​ n'a pas été utilisée((Lors de l'​utilisation d'un script sed sur un fichier, pour ce qui concerne les commandes d'​insertion (''​i''​),​ d'​ajout (''​a''​) et de changement (''​c''​),​ fort heureusement,​ par défaut, l'​affichage sur la sortie standard du tampon de travail de sed est annulé.\\ Ce n'est bien sûr pas le cas pour la commande de suppression ''​-s''​.))\\ ​
 //Attention l'​utilisation de l'​option ''​-n''​ est plus qu'​inutile !\\ En l'​utilisant,​ il ne resterait du fichier que ce qui lui aurait été ajouté.\\ La note ci-dessus en donne exemple.// //Attention l'​utilisation de l'​option ''​-n''​ est plus qu'​inutile !\\ En l'​utilisant,​ il ne resterait du fichier que ce qui lui aurait été ajouté.\\ La note ci-dessus en donne exemple.//
Ligne 242: Ligne 251:
 bizarre ce Nono bizarre ce Nono
 </​code>​ </​code>​
-La ligne de commandes de "​script2-sed",​ matche la ligne "il veut pour adresse mail 127.0.0.1@lo",​ du fait de l'​option ''​-n'',​ ni la ligne qui correspond à la //E.R//, ni les autres lignes du fichier ne sont placées dans le tampon de travail de sed ; puis sed applique la commande d'​ajout de "​script2-sed"​ ; et inscrit enfin ce résultat dans le fichier "​sed-options"​.\\ ​par conséquent il ne reste plus dans le fichier que l'​ajout "​bizarre ce Nono".+La ligne de commandes de "​script2-sed",​ matche la ligne "il veut pour adresse mail 127.0.0.1@lo",​ du fait de l'​option ''​-n'',​ ni la ligne qui correspond à la //E.R//, ni les autres lignes du fichier ne sont placées dans le tampon de travail de sed ; puis sed applique la commande d'​ajout de "​script2-sed"​ ; et inscrit enfin ce résultat dans le fichier "​sed-options"​.\\ ​Par conséquent il ne reste plus dans le fichier que l'​ajout "​bizarre ce Nono".
 </​note>​ </​note>​
  
Ligne 305: Ligne 314:
   * un numéro de ligne (les lignes sont numérotées à partir du chiffre 1);   * un numéro de ligne (les lignes sont numérotées à partir du chiffre 1);
   * le caractère ''​$''​ désignant la dernière ligne;   * le caractère ''​$''​ désignant la dernière ligne;
-  * une expression régulière encadrée par des caractères ''/'';​+  * par l'​encadrement /ER/cmd : [[utilisateurs:​hypathie:​tutos:​sed-et-les-expressions-rationnelles|une expression régulière]] encadrée par des caractères ''/'';​
  
  
Ligne 320: Ligne 329:
 |a\texte |ajouter du texte | |a\texte |ajouter du texte |
  
- +===Préparation ​=== 
-==="​i"​ : insertion avant la ligne d'​adressage=== +<​code ​text sed-automn.txt>
-<​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 automne
 mon bel automne mon bel automne
Ligne 345: Ligne 347:
 et son adieu et son adieu
 </​code>​ </​code>​
 +
 +==="​i"​ : insertion avant la ligne d'​adressage===
 +
 +<code user>
 +sed '​1i\Ton sentiment comme atmosphère'​ sed-automn.txt
 +</​code>​
 +
 +>Le titre "Ton sentiment comme atmosphère"​ est ajouté sur la sortie standard.
  
 === "​a"​ : ajout après l'​adressage=== === "​a"​ : ajout après l'​adressage===
 <code user> <code user>
-sed -e '1a\ ' -e '​2,​$s/​^/​ /' ​-i sed-cmd+sed -e '1a\ ' -e '​2,​$s/​^/​ /' sed-automn.txt
 </​code>​ </​code>​
 +
 +>Pour ajouter une ligne vide en deuxième ligne avec la commande (a), il faut ajouter au moins un caractère, ici, "​espace"​.
 +>Pour désigner une ligne précise aux commandes qui suivent __une commande d'​ajout__ de ligne, il peut être plus simple d'​utiliser l'​adressage par encadrement (par exemple ici, ''​ /​^mon/,​$s/​^/​ / '',​ ou ''​ 2,$s/^/ / ''​).
 +
 +===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>
 +sed -e '​1i\Ton sentiment comme atmosphère'​\
 + -e '/​^automne/​i\ '\
 + -e '​1,​$s/​^/​ /' -i sed-automn.txt
 +</​code>​
 +
 +On aurait pu utiliser la ligne de commande qui suit, pour obtenir le même résultat.
 +<code user>
 +sed -e '​1i\Ton sentiment comme atmosphère'​\
 + -e '1i\ '\
 + -e '​1,​$s/​^/​ /' -i sed-automn.txt
 +</​code>​
 +
 +
 +>Il est à noter quels ont été les adressages utilisés pour obtenir ce résultat, par rapport à ceux qui avaient été utilisés précédemment
 +>(pour les exemples où les commandes i et a étaient utilisées seules).
 +>Voir la prochaine note.
 +
 +===Résultat===
 +L'​option ''​-i''​ a été utilisée, le fichier "​sed-automn.txt"​ est maintenant :
 <code user> <code user>
-cat sed-cmd+cat sed-automn.txt
 </​code>​ </​code>​
 <​code>​ <​code>​
Ligne 372: Ligne 413:
  et son adieu  et son adieu
 </​code>​ </​code>​
 +<note important>​
 +Attention !\\
 +
 +Si on utilise __plusieurs commandes d'​ajout__,​ la charge de la mémoire tampon est si importante
 +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__!\\ ​
 +
 +Ainsi cette ligne de commandes sed :
 +<code user>
 +sed -e '​1i\Ton sentiment comme atmosphère'​\
 + -e '2i\ '\
 + -e '​2,​$s/​^/​ /' sed-automn.txt
 +</​code>​
 +<​code>​
 +Ton sentiment comme atmosphère
 +automne
 + 
 + mon bel automne
 +# J'ai supprimé le reste du retour qui ne sert pas l'​explication.
 +</​code>​
 +Et celle-ci :
 +
 +<code user>
 +sed -e '​1i\Ton sentiment comme atmosphère'​\
 + -e '2i\ '\
 + -e '​3,​$s/​^/​ /' sed-automn.txt
 +</​code>​
 +<​code>​
 +Ton sentiment comme atmosphère
 +automne
 + 
 +mon bel automne
 + dans les vergers
 +# J'ai supprimé le reste du retour qui ne sert pas l'​explication.
 +</​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>​
  
 ====Adressage double ==== ====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. ​
-  * 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 numéros de ligne ''​**n,​m**cmd_sed''​ : (''​** n **'' ​et ''​** m **''​ sont des nombres) ​l'​analyseur de sed traite ​la plage de lignes ​commençant de la ligne ''​** n **''​ jusqu'​à la ligne ''​** m **''​.\\  
-  * 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.)) +  * deux encadrements ''​**/ER1/,/ER2/**''​ : l'​analyseur de sed traite ​la plage de lignes ​commençant à partir de la première ligne reconnue ​par //ER1// jusqu'​à la ligne reconnue par //​ER2//, ​en prenant le nombre de lignes le plus large((c'​est-à-dire, ​qu'​il ​peut y avoir une ligne avec ER1 dans la plage ''​**n,/​ER/​**''​.)) 
-  * 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 ''​**n,/ER/**''​ : La plage est constituée à partir de la ligne numéro ''​** **'',​ jusqu'​à la première ligne reconnue par le //ER// 
-  * 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/,m**''​ : La plage est constituée à partir de la première ligne vérifiant ​//​ER// ​jusqu'​à la ligne de numéro ''​** m **''​.
  
 ====Les commandes de sed supportant les adressages universaux et l'​adressage double==== ====Les commandes de sed supportant les adressages universaux et l'​adressage double====
Ligne 388: Ligne 466:
 |y/​..../​..../​ | translittération | |y/​..../​..../​ | translittération |
 |c\texte |changement de texte| |c\texte |changement de texte|
- 
-===Préparation === 
-<code text sed-cmd> 
-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>​ 
- 
  
 ===="​p"​ : affichage ==== ===="​p"​ : affichage ====
 <code user> <code user>
-sed -n '/​.*,​[[:​space:​]]/,​10p' sed-cmd+sed -n '/​.*,​[[:​space:​]]/,​9p' sed-automn.txt
 </​code>​ </​code>​
 <​code>​ <​code>​
-tes fruits, ta pomme + tes fruits, ta pomme 
-et le cerf, et son brame + et le cerf, et son brame
-à jamais aimés+
 </​code>​ </​code>​
  
 ===="​d"​ : suppression ==== ===="​d"​ : suppression ====
 <code user> <code user>
-sed '/tes/,10d' sed-cmd+sed -e '​4,​6d'​ -e '8,14d' sed-automn.txt
 </​code>​ </​code>​
 <​code>​ <​code>​
-automne +Ton sentiment comme atmosphère 
-mon bel automne +  
-dans les vergers + ​automne 
-du fond du ciel + les éperviers  
-les éperviers ​ + me donnent 
-de l'​homme + et des langueurs 
-en ton cheveu + et son adieu
-me donnent +
-et des langueurs +
-et son adieu+
 </​code>​ </​code>​
  
 ==== "​="​ numérotation==== ==== "​="​ numérotation====
 <code user> <code user>
-sed '​1,​$='​ sed-cmd+sed '​1,​$='​ sed-automn.txt
 </​code>​ </​code>​
 <​code>​ <​code>​
 1 1
-automne+Ton sentiment comme atmosphère
 2 2
-mon bel automne+ 
 3 3
-dans les vergers+ ​automne
 4 4
-du fond du ciel+ mon bel automne
 5 5
-les éperviers ​+ ​dans ​les vergers
 6 6
-de tes yeux planent+ du fond du ciel
 7 7
-tes feuilles+ les éperviers ​
 8 8
-tes fruits, ta pomme+ ​de ​tes yeux planent
 9 9
-et le cerf, et son brame+ tes feuilles
 10 10
-à jamais aimés+ tes fruits, ta pomme
 11 11
-de l'​homme+ et le cerf, et son brame
 12 12
-en ton cheveu+ à jamais aimés
 13 13
-me donnent+ de l'​homme
 14 14
-et des langueurs+ en ton cheveu
 15 15
-et son adieu+ me donnent 
 +16 
 + et des langueurs 
 +17 
 + et son adieu
 </​code>​ </​code>​
 +<note tip>
 +Pour n'​avoir que la numérotation,​ on peut utiliser l'​option ''​-n''​ :
  
 +<code user>
 +sed -n '​='​ sed-automn.txt
 +</​code>​
 +</​note>​
 ==== "​y"​ : translittération==== ==== "​y"​ : translittération====
 <code user> <code user>
-sed '2,$!y/a/A/' sed-cmd+sed '3,4y/a/A/' sed-automn.txt
 </​code>​ </​code>​
 <​code>​ <​code>​
-Automne +Ton sentiment comme atmosphère 
-mon bel automne +  
-dans les vergers + Automne 
-du fond du ciel + mon bel Automne 
-les éperviers  + dans les vergers 
-de tes yeux planent + du fond du ciel 
-tes feuilles + les éperviers  
-tes fruits, ta pomme + de tes yeux planent 
-et le cerf, et son brame + tes feuilles 
-à jamais aimés + tes fruits, ta pomme 
-de l'​homme + et le cerf, et son brame 
-en ton cheveu + à jamais aimés 
-me donnent + de l'​homme 
-et des langueurs + en ton cheveu 
-et son adieu+ me donnent 
 + et des langueurs 
 + et son adieu
 </​code>​ </​code>​
  
 ==== "​c"​ : changement de texte==== ==== "​c"​ : changement de texte====
 <code user> <code user>
-sed -e '3,$c\ +sed -e '5,$c\ 
-fleuve Léthé\ + ​fleuve Léthé\ 
-en ton grand coeur\ + en ton grand coeur\ 
-devient Vestale\  + ​devient Vestale\  
-' sed-cmd+' sed-automn.txt
 </​code>​ </​code>​
 <​code>​ <​code>​
-automne +Ton sentiment comme atmosphère 
-mon bel automne +  
-fleuve Léthé + automne 
-en ton grand coeur + mon bel automne 
-devient Vestale+ ​fleuve Léthé 
 + en ton grand coeur 
 + ​devient Vestale
 </​code>​ </​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>​
 +
 +>Le caractère # commente la ligne.
 +
 +===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"​===== =====La commande "​s"​=====
Ligne 839: Ligne 941:
  Match every step' th line starting with line first.  Match every step' th line starting with line first.
 </​code>​ </​code>​
-Remplaçons "​first"​ et step" par "​n"​ et "​m"​ qui sont toujours des nombres ! 
  
 +<note tip>
 +Remplaçons "​first"​ et step" par "​n"​ et "​m"​ qui sont toujours des nombres !\\
 L'​expression ''​n ~ m''​ ou ''​n~m''​ signifie simplement :\\ L'​expression ''​n ~ m''​ ou ''​n~m''​ signifie simplement :\\
  
- "​ la E.R matche ​toutes les ''​n''​ième ligne(s) d'un fichier ​et cela en sautant un nombre de ligne égal à un écart (~) qui est lui-même ​égalà la différence ​entre le nombre ''​m''​ avec la première ligne du fichier ​(c'​est-à-dire la position ordinal 1). On connaît donc le nombre de ligne sautée en faisant toujours ''​m - 1''​."+La E.R sélectionne ​toutes les ''​n''​ième ligne(s) d'un fichier en sautant un nombre de ligne(s) égal à un écart (~).\\   
 +Cet écart ​est égal à la différence ​__entre ​le nombre ''​m''​ avec la première ligne du fichier__ ​(c'​est-à-dire la position ordinal 1).\\   
 +On connaît donc le nombre de ligne(s) sautée(s) en faisant toujours ''​m - 1''​. ​
  
-Et si ''​n''​ est égal à zéro, ​alors le E.R. match toutes les ''​m''​ièmes lignes à partir de la ligne ''​m''​ et saute ''​m'' ​- 1 ligne(s).+Et si ''​n''​ est égal à zéro, ​''​n''​ devient la position ordinale 1 du fichier, ainsi que l'​adressage de début. Donc la //E.R.// sélectionne ​toutes les ''​m''​ièmes lignes à partir de la ligne ''​n''​et saute m - 1 ligne(s).
  
-  * ''​1 ~ 2''​ : matche les lignes impaires : 1ière, 3ième, 5ième, etc.\\ En effet, de la première ligne du fichier à ''​m''​ (''​m'' ​= 2), il y a 1. Il sera sauté 1 ligne non-matchée ​et cela à partir de la ligne n°1 (''​n'' ​= 1). Donc la sélection ​concerne ​la première ligne et saute 1 ligne, ​matche ​la 3ième ligne et saute 1 ligne, etc. +  * ''​1 ~ 2''​ : sélection des lignes impaires : 1ière, 3ième, 5ième, etc.\\ En effet, de la première ligne du fichier ​jusqu'à ''​m''​, il y a 1 (m = 2 et 2 - =1).\\ Il sera sauté 1 ligne (non-sélectionnée) ​et cela à partir de la ligne n°1 (n = 1 = la position ordinale).\\ Donc sélection ​de la première ligne, saut d'​une ​ligne, ​sélection de la 3ième ligne, saut 1 ligne, etc. 
-  * ''​2~3''​ : matche ​les lignes 2 ; 5 ; 8 ; 11\\ L'​écart sauté sera de 2 car de la position 3 (''​m'' ​= 3) à la première ligne du fichier, ​il y a deux lignes (3-1=2), et cela commence à la deuxième ligne (''​n'' ​= 2). Donc la deuxième ligne est matchée, deux lignes sont sautées (3ième et 4 ième), la 5 ième est matchée, etc+ 
-  * 10 ~ 5 : sélection des lignes 10 ; 15 ; 20 ; 25 etc. 5 - 1 = 4 : Il sera sauté 4 lignes non-matchées à partir de la ligne 10+  * ''​2 ~ 3''​ : sélection ​les lignes 2 ; 5 ; 8 ; 11\\ L'​écart sauté sera de 2 car l'​écart entre la position 3 (m = 3) et la première ligne du fichier, ​est de 2 lignes (3 - 1 = 2), et cela commence à la deuxième ligne (n = 2).\\ Donc la deuxième ligne est sélectionnée, deux lignes sont sautées (3ième et 4 ième), la 5 ième est sélectionnée, etc. 
-  + 
-  * 0~5 : sélection des lignes 5 ; 10 ; 15 etc.\\ m-1 = 5-1 = 4 lignes sautées, à partir de la cinquième ligne (''​m'' ​= 5 ).+  * ''​0 ~ 5'' ​: sélection des lignes 5 ; 10 ; 15 etc.\\ ​L'​écart est égal à m - 1 = 5 - 1 = 4 ; donc 4 lignes sautées, à partir de la cinquième ligne (m = 5 ). 
 + 
 +</​note>​
  
   * Exemple 1:   * Exemple 1:
Ligne 941: Ligne 1048:
  
 ==== # : Commentaire (Aucune adresse autorisée)==== ==== # : Commentaire (Aucune adresse autorisée)====
-Le caractère ​''​#''​ (dièse) commence un commentaire et ce jusqu'​à la fin de la ligne.\\  +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.\\ +Dans un script sed, il peut se trouver sur la même ligne qu'une commande, elle ne sera pas prise pour un commentaire.\\ 
 Si les deux premiers caractères d'un script sed sont "#​n",​ l'​option "​-n"​ (no-autoprint) est alors forcée. Si les deux premiers caractères d'un script sed sont "#​n",​ l'​option "​-n"​ (no-autoprint) est alors forcée.
  
Ligne 965: Ligne 1072:
  
 > Dans ce cas, sed affiche de la ligne 4 à la ligne 5.  > 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.+> Puis la commande d supprime tout sauf les lignes ​traitées par p et d.
  
 ===Utilisation de la commande ''​q''​=== ===Utilisation de la commande ''​q''​===
Ligne 985: Ligne 1092:
  
 > 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. > 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.+> 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ée ​à la mémoire principale.
  
 <​code>​ <​code>​
Ligne 1062: Ligne 1169:
  
 Il ne doit y avoir qu'un seul espace entre la commande et le nom du "​fichier lu"​.\\ ​ 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" +Il faut donner le chemin absolu du "​fichier lu" si le terminal ne se trouve ​pas dans le répertoire parent de ce "​fichier lu".
- si le terminal ne se trouve dans le répertoire parent de ce "​fichier lu".+
 ===Préparation=== ===Préparation===
   * soit le fichier "​sed-fich-lu.txt"​ :   * soit le fichier "​sed-fich-lu.txt"​ :
Ligne 1116: Ligne 1222:
 </​code>​ </​code>​
  
-=====Les ​commande fonctionnant en rapport avec d'​autres ​commandes =====+=====Les commandes ​multi-lignes  ​===== 
 +On les utilise avec d'​autres commandes.
  
 ^Commandes ​ ^Significations ​  ^ ^Commandes ​ ^Significations ​  ^
Ligne 1192: Ligne 1299:
 </​code>​ </​code>​
  
->la première ligne vide est matchée ​par /^$/ ;+>La première ligne vide est validée ​par se correspondance avec /^$/ ;
 >puis, N rend utilisable le caractère de nouvelle ligne (\n); >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 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,+>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. >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. ​+> Ainsi il peut supprimer ligne à ligne autant de lignes vides successives qu'il y en aurait, afin que toutes ​les lignes du texte ne soient espacées ​au plus que d'​un ​seul saut de ligne. ​
  
 ====La commande P (print) ==== ====La commande P (print) ====
utilisateurs/hypathie/tutos/sed-par-la-methode-structuraliste.1406609264.txt.gz · Dernière modification: 29/07/2014 06:47 par Hypathie

Pied de page des forums

Propulsé par FluxBB