• # Explications accolades... et plus si affinité...

    Posté par . En réponse au message Doc sur sed. Évalué à 1.

    Salut,

    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 :

    1. :a = pose d'une étiquette de référence
    2. n = on vide le buffer (espace de travail) et on prend la ligne suivante
    3. p = on imprime la nouvelle ligne contenue dans le buffer
    4. 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.