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 →
Ci-dessous, les différences entre deux révisions de la page.
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 [29/07/2014 18:29] Hypathie [Commandes de sed supportant les adressages universaux] |
utilisateurs:hypathie:tutos:sed-par-la-methode-structuraliste [30/07/2014 08:42] Hypathie [La commande s] |
||
---|---|---|---|
Ligne 48: | Ligne 48: | ||
^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 125: | Ligne 125: | ||
=== 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 309: | Ligne 309: | ||
* 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 356: | Ligne 356: | ||
</code> | </code> | ||
- | >Une ligne vide est ajoutée en deuxième ligne par la première ajout que si on indique au moins un caractère | + | >Pour ajouter une ligne vide en deuxième ligne avec la commande (a), il faut ajouter au moins un caractère, ici, "espace". |
- | >Il est plus simple, en cas de succession de commandes parmi lesquelles figure __une commande d'ajout__ de ligne, | + | >Pour désigner une ligne précises aux commandes qui suivent __une commande d'ajout__ de ligne, il peut être plus simple d'utiliser l'adressage par d'encadrement (par exemple ici, '' /^mon/,$s/^/ / '', ou '' 2,$s/^/ / ''). |
- | >d'utiliser l'adressage d'encadrement /^mon/. | + | |
- | + | ||
- | <code user>sed -e '1a\ ' -e '/^mon/,$s/^/ /' sed-automn.txt</code> | + | |
===Utiliser conjointement i et a === | ===Utiliser conjointement i et a === | ||
Ligne 367: | Ligne 364: | ||
* en insérant le titre "Ton sentiment comme atmosphère" | * en insérant le titre "Ton sentiment comme atmosphère" | ||
* en insérant une ligne ne comportant qu'un espace, | * en insérant une ligne ne comportant qu'un espace, | ||
- | * en ajoutant un espace à partir de la ligne /^automne/ | + | * en ajoutant un espace à partir de la ligne '' /^automne/ '' |
<code user> | <code user> | ||
Ligne 375: | Ligne 372: | ||
</code> | </code> | ||
- | >Il est à noter les adressages utilisés pour obtenir ce résultat, par rapport à ceux utilisés précédemment | + | On aurait pu utiliser utiliser la ligne de commande qui suit, pour obtenir le même résultat. |
- | >pour les exemples où les commandes i et a étaient utilisées seules. | + | |
- | + | ||
- | On aurait pu utiliser pour obtenir le même résultat : | + | |
<code user> | <code user> | ||
sed -e '1i\Ton sentiment comme atmosphère'\ | sed -e '1i\Ton sentiment comme atmosphère'\ | ||
Ligne 385: | Ligne 379: | ||
</code> | </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. | >Voir la prochaine note. | ||
Ligne 452: | Ligne 449: | ||
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 ''** n **'', 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 593: | Ligne 590: | ||
devient Vestale | devient Vestale | ||
</code> | </code> | ||
+ | |||
+ | >Le caractère # commande la ligne. | ||
===Lancer le script avec l'option -i === | ===Lancer le script avec l'option -i === | ||
Ligne 937: | Ligne 936: | ||
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 en plus 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 =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: |