Posté par zipe31 .
En réponse au message Sed sur plusieurs lignes.
Évalué à 3.
Dernière modification le 29 août 2014 à 17:39.
De rien.
Voilà les explications, mais comme dit dans mon premier post, sans exemples précis et concret, ce n'est peut-être pas l'idéal ;-\
#n
On imprime que sur demande (flag "p")
/^%!post.*/ !p
Si le motif ne correspond pas, on imprime la ligne
/^%!post/ {
Si le motif correspond, on applique les commandes entre accolades
h
On copie le contenu de la mémoire principale dans la mémoire secondaire en écrasant ce qui s'y trouverait éventuellement
:z
On pose une étiquette
n
On vide le contenu de la mémoire principale en le remplaçant par la ligne suivante
/^[[:space:]]*$/ {
On teste le contenu pour voir s'il c'est soit une ligne vide, soit une ligne vide contenant d'éventuels espaces
H
Si c'est le cas, on ajoute le contenu de la mémoire principale à la mémoire secondaire
b z
Puis on se branche à l'étiquette et on recommence
}
Fin des commandes pour ce motif
x
Donc, si le motif précédent n'est pas trouvé, on échange le contenu des mémoires
s/$/\nAAA/p
On ajoute notre "ligne à insérer" à la fin du contenu de la mémoire principale (qui contient le motif recherché est ses éventuelles lignes vides ou remplies d'espace), et on l'imprime (flag "p")
g
On écrase le contenu de la mémoire principale par celui de la mémoire secondaire (qui contient la première ligne non vide qui suit le motif initial)
G
On ajoute à nouveau le contenu de la mémoire secondaire à la suite de lui-même. Petite explication supplémentaire pour ça à l'instruction suivante...
D
On efface le contenu de la mémoire principale du début de la ligne jusqu'au premier saut de ligne rencontré (\n), ce qui a pour effet de relancer le script sed depuis le début avec le contenu actuel de la mémoire principale. Sans cette petite pirouette (G puis D) le script serait relancé mais en passant à la ligne suivante, sans traiter la ligne actuelle.
[^] # Re: À tester...
Posté par zipe31 . En réponse au message Sed sur plusieurs lignes. Évalué à 3. Dernière modification le 29 août 2014 à 17:39.
De rien.
Voilà les explications, mais comme dit dans mon premier post, sans exemples précis et concret, ce n'est peut-être pas l'idéal ;-\
#n
On imprime que sur demande (flag "p")
/
^%!post.*/ !pSi le motif ne correspond pas, on imprime la ligne
/
^%!post/ {Si le motif correspond, on applique les commandes entre accolades
h
On copie le contenu de la mémoire principale dans la mémoire secondaire en écrasant ce qui s'y trouverait éventuellement
:z
On pose une étiquette
n
On vide le contenu de la mémoire principale en le remplaçant par la ligne suivante
/
^[[:space:]]*$/ {On teste le contenu pour voir s'il c'est soit une ligne vide, soit une ligne vide contenant d'éventuels espaces
H
Si c'est le cas, on ajoute le contenu de la mémoire principale à la mémoire secondaire
b z
Puis on se branche à l'étiquette et on recommence
}
Fin des commandes pour ce motif
x
Donc, si le motif précédent n'est pas trouvé, on échange le contenu des mémoires
s/$/\nAAA/p
On ajoute notre "ligne à insérer" à la fin du contenu de la mémoire principale (qui contient le motif recherché est ses éventuelles lignes vides ou remplies d'espace), et on l'imprime (flag "p")
g
On écrase le contenu de la mémoire principale par celui de la mémoire secondaire (qui contient la première ligne non vide qui suit le motif initial)
G
On ajoute à nouveau le contenu de la mémoire secondaire à la suite de lui-même. Petite explication supplémentaire pour ça à l'instruction suivante...
D
On efface le contenu de la mémoire principale du début de la ligne jusqu'au premier saut de ligne rencontré (\n), ce qui a pour effet de relancer le script sed depuis le début avec le contenu actuel de la mémoire principale. Sans cette petite pirouette (G puis D) le script serait relancé mais en passant à la ligne suivante, sans traiter la ligne actuelle.
}
Fin des commandes