Com o bash, você pode escrever:
templ=$(<template.html)
value=$(<contents.html)
echo "${templ//__PLACEHOLDER__/$value}" > page.html
Eu devo criar um .sh para substituir uma palavra-chave específica em um arquivo usando o conteúdo de outro arquivo.
Sed pode ser usado para substituir a palavra-chave:
value="hello superuser"
sed -e "s/__PLACEHOLDER__/${value}/g" template.html > page.html
Então eu tentei o seguinte:
value=$(<contents.html)
sed -e "s/__PLACEHOLDER__/${value}/g" template.html > page.html
E receba a seguinte mensagem de erro: nova linhagem sem escape dentro do padrão substituto
Como lidar com esse tipo de situação, por favor?
Obrigado!
Isso ocorre porque "contents.html" contém várias linhas, e os caracteres de nova linha precisam ser convertidos em \n
antes de serem enviados para sed
.
Por exemplo, se "contents.html" contiver
Line 1
Line 2
Line 3
Você precisará alterá-lo para "Linha 1 \ nLinha2 \ nLinha3" antes de usá-la como padrão substituto.
Eu mudei seu script como:
value=$(sed ':a;N;$!ba;s/\n/\n/g' contents.html)
sed -e "s/__PLACEHOLDER__/${value}/g" template.html > page.html
A primeira linha lê "contents.html" e substitui o caractere de nova linha por \n
. (Crédito para este tópico )
Tags sh sed shell find-and-replace