A maneira mais fácil de inserir um valor de variável do shell em sed
e não se preocupar com a maneira como o escape da barra invertida precisará ser alterada para o resto do script sed
é colocar tudo em cotações simples exceto a variável, e coloque isso entre aspas duplas.
Todos os exemplos de código a seguir pressupõem: VALUE='foo \([a-z]\+\)'
O seguinte código quebrado falha porque a variável VALUE
não está expandida:
sed 's/"${VALUE}"/foo happy /' test.txt
O seguinte código quebrado falha porque a barra invertida em
é comido pelo shell (porque está entre aspas duplas em vez de aspas simples) antes de sed
vê-lo:
sed "s/${VALUE}/foo happy /" test.txt
O código a seguir funciona conforme o esperado:
sed 's/'"${VALUE}"'/foo happy /' test.txt
O seguinte código também funciona:
sed "s/${VALUE}/foo happy \1/" test.txt
O mesmo acontece com o seguinte:
sed s/"${VALUE}"/foo\ happy\ \1/ test.txt
Mas por que ficar complicado? Aspas simples em torno de um script sed
tornam tudo muito mais claro, especialmente para os gurus que não utilizam scripts de shell que lêem seu código. Minha maneira preferida é, novamente, abandonar as aspas simples para aspas duplas apenas para a expansão da variável e voltar para aspas simples:
sed 's/'"${VALUE}"'/foo happy /' test.txt