Você não pode interpolar com segurança uma variável em um comando sed, porque a substituição é executada pelo shell, não pelo sed. O valor da variável se torna a sintaxe do sed. Por exemplo, em "s/TMPFOO1/$FOO1/"
, se $FOO1
contiver uma nova linha, isso causará um erro de sintaxe como o que você observou. Se $FOO1
contiver /
, isso terminará o comando s
e poderá causar um erro ou poderá causar a execução de outros comandos (se o que acontecer depois que a /
for uma sintaxe de sed válida).
Enquanto você pode fazer uma primeira passagem de substituição de FOO1
para citar seus caracteres especiais para inclusão nesse comando sed, é muito mais simples usar o awk. O awk tem uma noção de variável e uma sintaxe de linha de comando para definir o valor inicial de uma variável.
awk -v FOO1="$FOO1" -v FOO2="$FOO2" -v FOO3="$FOO3" -v FOO4="$FOO4" -v FOO5="$FOO5" '{
sub(/TMPFOO1/, FOO1);
sub(/TMPFOO2/, FOO2);
sub(/TMPFOO3/, FOO3);
sub(/TMPFOO4/, FOO4);
sub(/TMPFOO5/, FOO5);
print;
}' /home/foo/template > /home/foo/template/finishedresult