sed pattern com várias palavras para atualizar

1

Eu quero fazer algo assim, mas não sei como.

Eu quero atualizar o exports.version = '2.0.0' para um novo valor de exports.version = '2.0.1'

Usando:

sed -i '.bak' 's/'2.0.0'/'2.0.1'/g' phantomjs.js

Mas isso pode causar um problema se eu tiver algo mais com o 2.0.0

sed -i '.bak' 's/exports.version = '2.0.0'/exports.version = '2.0.1'/g' phantomjs.js

Em resumo, como alimentar um padrão sed de exports.version = '2.0.0'

uname -a

15.0.0 Darwin Kernel Versão 15.0.0: sáb 19 de setembro 15:53:46 PDT 2015; root: xnu-3247.10.11 ~ 1 / RELEASE_X86_64 x86_64

Obrigado,

L

    
por lindison 29.10.2015 / 07:08

2 respostas

1

Tente isto:

sed -i '.bak' "s/exports\.version = '2\.0\.0'/exports.version = '2.0.1'/g" phantomjs.js
    
por 29.10.2015 / 07:16
1

Você está tentando colocar aspas simples dentro de uma string entre aspas simples. Se você fizer isso, você precisa inseri-los assim:

$ sed -i .bak 's/exports.version = '\''2.0.0'\''/exports.version = '\''2.0.1'\''/g' phantomjs.js

Não é possível colocar diretamente uma aspa simples dentro de uma string entre aspas simples. Acima, '\'' funciona porque a primeira aspa simples termina a cadeia precedente com aspas simples, a \' coloca uma aspa simples na linha de comando e a seguinte ' inicia uma nova cadeia entre aspas simples.

No seu caso particular, você também pode usar uma string com aspas duplas:

sed -i .bak "s/exports.version = '2.0.0'/exports.version = '2.0.1'/g" phantomjs.js

Isso é conveniente porque é possível colocar aspas simples dentro de uma cadeia de aspas duplas sem escape. Isso é complicado, porque você precisa ter certeza de que não há caracteres ativos em shell na string. Neste caso, não há, por isso, é seguro.

    
por 29.10.2015 / 07:16