Substituir valor entre aspas simples em uma linha que contém certa palavra usando o comando sed

2

Eu tenho uma linha como abaixo em um arquivo html,

shahar.push(['remoteUrl', 'staging.zazzercode.com']);

Dependendo do ambiente, quero substituir o valor remoteUrl pelo comando sed .

por exemplo,

shahar.push(['remoteUrl', 'staging.zazzercode.com']);
shahar.push(['remoteUrl', 'production.zazzercode.com']);

eu usei

sed -i '/remoteUrl/c\shahar.push(['remoteUrl','staging.zazzercode.com']);' predict.html

Funciona, mas a remoção de aspas simples sobre 'remoteUrl' e 'staging.zazzercode.com' causa um erro de HTML.

shahar.push([remoteUrl, staging.zazzercode.com]);

Então, por segurança, eu quero alterar o comando sed apenas para alterar o valor entre duas aspas simples depois de , em uma linha com remoteUrl .

Ou eu quero outras opções sed do que eu sabia para substituir a linha inteira, mas com aspas simples.

    
por prayagupd 04.08.2014 / 20:44

2 respostas

2

O problema é que bash está processando sua linha de comando antes de sed ter acesso a ela. Nesse caso, as soluções são alterar as aspas externas para aspas duplas:

sed -i "/remoteUrl/c\shahar.push(['remoteUrl','staging.zazzercode.com']);" predict.html

O problema foi que bash realiza a remoção da cotação antes de passar o comando para sed . Aos olhos de bash, seu comando original era uma série de strings entre aspas simples e bash removeu todas as aspas. Na versão acima, bash vê uma única cadeia de aspas duplas. Embora bash remova as aspas duplas antes de passar a string para sed , ela deixa as aspas simples internas apenas.

    
por 04.08.2014 / 21:11
1

So, to be safe, I want to change the sed command just to change the value between two single quotes after a comma (,) in a line with 'remoteUrl'.

sed "s/\('remoteUrl',.*'\).*\('\)/staging.zazzercode.com/"

s é pesquisar, substituir e substituir. \( e \) na cadeia “antiga” (especificada primeiro) identificam substrings. e (e \n , até ) copiam essas substrings na cadeia de substituição.

    
por 04.08.2014 / 21:53