Linux bash: Pesquise e substitua o arquivo sem escapar do incômodo

2

Existe alguma solução bash para fazer uma simples "pesquisa e substituição" sem escapar de problemas? Eu tento substituir <!-- JavaScript --> em um arquivo html com o conteúdo de um arquivo javascript complexo.

Eu tentei

JS=$(<"path to javascript file")
sed "s|<!-- JavaScript -->|${JS}|g" "path to html file" > "path to html file"

mas é só pegar

sed: -e Ausdruck #1, Zeichen 16: Nicht beendeter 's'-Befehl

Em Powershell eu faço

$CSS = Get-Content "path to javascript file"
(Get-Content "path to html file").replace('<!-- JavaScript -->', $JS) | Set-Content "path to html file" -Force

e funciona como um encanto, sem fugir de problemas.

Atualizar (mas também não funciona):

JS=$(<"${TemporaryPath}/${Project}/${Project}.js")
E='!'
sed "s|<${E}-- JavaScript -->|${JS}|g" "path to html file" > "path to html file"

Eu recebo sed: -e Ausdruck #1, Zeichen 68: Nicht beendeter s'-Befehl . Se eu mudar o conteúdo de $ JS para algo básico como "foo", funciona. Provavelmente um problema com o conteúdo javascript de $ JS? O que posso fazer para que o conteúdo de $ JS não importe?

    
por Hativ 12.01.2016 / 18:19

2 respostas

3

Seu problema é que bash está interpretando o ponto de exclamação. Escapando isso com uma barra invertida infelizmente não funciona. Coloque-o em outra variável, ou coloque-o entre aspas simples, mantendo a variável entre aspas duplas, e tudo ficará bem. . .

$ ARG="mytest"
$ echo "hello $ARG!"
bash: !": event not found
$ # didn't work
$ echo "hello $ARG\!"
hello mytest\!
$ # didn't work either!
$ echo "hello $ARG"'!'
hello mytest!
$ # that's better
$ E='!'
$ echo "hello $ARG$E"
hello mytest!
$ I like this one best.
    
por 12.01.2016 / 19:19
0

use aspas simples em vez de duplas:

[alexus@wcmisdlin02 Downloads]$ test="testing"
[alexus@wcmisdlin02 Downloads]$ echo "$test"
testing
[alexus@wcmisdlin02 Downloads]$ echo '$test'
$test
[alexus@wcmisdlin02 Downloads]$ 
    
por 12.01.2016 / 18:31

Tags