shell script para substituir uma palavra-chave em um arquivo pelo conteúdo de outro arquivo

5

Eu devo criar um .sh para substituir uma palavra-chave específica em um arquivo usando o conteúdo de outro arquivo.

  • template.html contém uma string única " PLACEHOLDER "
  • deve ser substituído pelo conteúdo do arquivo "contents.html"

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!

    
por Jem 13.06.2014 / 10:00

2 respostas

6

Com o bash, você pode escrever:

templ=$(<template.html)
value=$(<contents.html)
echo "${templ//__PLACEHOLDER__/$value}" > page.html
    
por 13.06.2014 / 13:21
1

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 )

    
por 13.06.2014 / 11:35