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.
# Il faut protéger la variable, et corriger la commande sed
Posté par wismerhill . 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:
Mais puisque le reste de la commande sed ne contient pas de ,ドル on peut faire plus simple:
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
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
Je n'ai pas testé, mais cette version à plus de chance de fonctionner.