• # Il faut protéger la variable, et corriger la commande sed

    Posté par . En réponse au message [SED] Ajouter un caractère en début de ligne.. Évalué à 7. Dernière modification le 27 mai 2018 à 22:30.

    D'abord, si la variable $look contient des caractères particulier (ne serait-ce qu'un espace!), ça ne va pas donner ce que tu espèce.
    Il faut la protéger avec des guillemets doubles:

    sed 's/'"$look"'/^#/' test.conf

    Mais puisque le reste de la commande sed ne contient pas de ,ドル on peut faire plus simple:

    sed "s/$look/^#/" test.conf

    Ensuite, cette commande sed ne fait pas ce que tu crois, elle va remplacer la valeur contenue dans $look par la série de caractères "#".

    Mais en fait, toute la ligne qui affecte une valeur à look ne sert à rien (et contient un UUOC).
    Tu peux simplement faire

    sed "/$domain/ s/^/#/" test.conf

    Cette version utilise une adresse, sous forme d'expression rationnelle, pour déterminer à quelles lignes appliquer la commande s, cette dernière se contente de faire un match sur le début de la ligne, et le remplacer par un #.
    Et au moins, cette version fonctionnera correctement si plus d'une ligne dans le fichier contient de domaine recharché.

    Note que si $domain contient des caractères spéciaux pour sed, ça ne fonctionnera pas.
    Au minimum, puisqu'il doit s'agir de noms de domaine, il faudrait échapper les points, tu peux utiliser la syntaxe du shell pour ça avec l'expansion du type ${PARAMETER/PATTERN/STRING}, ça donne

    sed "/${domain//./\\.}/ s/^/#/" test.conf

    Je n'ai pas testé, mais cette version à plus de chance de fonctionner.