Je ne connais pas l’emploie des accolade avec les éléments à l’interieur.
A priori ça permet d’aller à la ligne contenant la valeur de la variable label
Euh... non, pas exactement.
Les accolades permettent d'assigner une ou plusieurs commandes à un motif donné.
Dans ton exemple, les instructions contenues entre les accolades ne s'appliqueront qu'à la ligne ou qu'aux lignes contenant la valeur de la variable "${label}".
D'autre part, l'instruction écrite tel quel n'a pas trop de sens, du moins au sens littéral, mais sans voir le fichier cible et sans connaître le but précis, difficile de l'expliquer.
L'étiquette ":a" entre les accolades et suivie de l'instruction "n" (next) puis impression de ladite ligne et branchement à l'étiquette est quelque part absurde (sauf si c'est le but recherché), mais en gros cette syntaxe va cibler le motif recherché pour y appliquer les commandes comprises entre accolade, à savoir :
:a = pose d'une étiquette de référence
n = on vide le buffer (espace de travail) et on prend la ligne suivante
p = on imprime la nouvelle ligne contenue dans le buffer
ba = on se branche à l'étiquette et on recommence à appliquer les commandes n;p;ba;
Et c'est là que ça foire (4), parce que à partir de là, le script va tout simplement imprimer chaque ligne restante jusqu'à la fin du fichier. Ce qui ne semble pas être le but final.
Pour moi, il aurait fallu écrire :
sed -n ':a;/motif/{n;p;ba};' file pour que ça ait un sens.
# Explications accolades... et plus si affinité...
Posté par zipe31 . En réponse au message Doc sur sed. Évalué à 1.
Salut,
Euh... non, pas exactement.
Les accolades permettent d'assigner une ou plusieurs commandes à un motif donné.
Dans ton exemple, les instructions contenues entre les accolades ne s'appliqueront qu'à la ligne ou qu'aux lignes contenant la valeur de la variable "${label}".
D'autre part, l'instruction écrite tel quel n'a pas trop de sens, du moins au sens littéral, mais sans voir le fichier cible et sans connaître le but précis, difficile de l'expliquer.
L'étiquette ":a" entre les accolades et suivie de l'instruction "n" (next) puis impression de ladite ligne et branchement à l'étiquette est quelque part absurde (sauf si c'est le but recherché), mais en gros cette syntaxe va cibler le motif recherché pour y appliquer les commandes comprises entre accolade, à savoir :
Et c'est là que ça foire (4), parce que à partir de là, le script va tout simplement imprimer chaque ligne restante jusqu'à la fin du fichier. Ce qui ne semble pas être le but final.
Pour moi, il aurait fallu écrire :
pour que ça ait un sens.sed -n ':a;/motif/{n;p;ba};' file