Fora de script funciona e dentro não | sed -i 's/antigo/novo/' arquivo [RESOLVIDO]

1. Fora de script funciona e dentro não | sed -i 's/antigo/novo/' arquivo [RESOLVIDO]

hauck
hauck

(usa Nenhuma)

Enviado em 20/01/2020 - 23:02h

Olá, tenho um script onde uso o IF abaixo para verificar se a resposta de uma pergunta não é nula, se o usuário digitou alguma coisa como resposta o SED usa isso para substituir um texto em um arquivo.
Executei o SED no terminal fora do script, fora do IF e com o IF reduzido junto, e tudo que fiz fora do script funcionou.
Poderiam me ajudar? Se precisar do código completo posso postar aqui.

 [[ -n $antigo ]] && sed -i 's/antigo/novo/' arquivo  



  


2. MELHOR RESPOSTA

Perfil removido
removido

(usa Nenhuma)

Enviado em 20/01/2020 - 23:34h

Essa variável $antigo, você quer substituir ela de dentro da expressão do sed?

Está faltando o sinal de '$' para indicar variável, e as variáveis não vão ser substituidas no meio de aspas simples. Neste caso, pode usar aspas duplas. Com 'g' no final da expressão do sed para alterar todas os alvos do arq.
[[ -n $antigo ]] && sed -i "s/$antigo/novo/g" arquivo


3. Re: Fora de script funciona e dentro não | sed -i 's/antigo/novo/' arquivo

hauck
hauck

(usa Nenhuma)

Enviado em 20/01/2020 - 23:37h

[[ -n $antigoNomeContato ]] && sed -i 's/$antigoNomeContato/$nomeContato/' $arquivoContatos
sed -i 's/$antigoNomeContato/$nomeContato/' $arquivoContatos

No script o código do sed está assim, está correto aparentemente.
Aqui no VOL eu deixei o código daquele jeito mas para mim está assim.
Vou ver se funciona como disse.

marimbondo2 escreveu:

Essa variável $antigo, você quer substituir ela de dentro da expressão do sed?

Está faltando o sinal de '$' para indicar variável, e as variáveis não vão ser subtituidas no meio de aspas simples. Neste caso, pode usar aspas duplas.
[[ -n $antigo ]] && sed -i 's/antigo/novo/' arquivo





4. Re: Fora de script funciona e dentro não | sed -i 's/antigo/novo/' arquivo [RESOLVIDO]

hauck
hauck

(usa Nenhuma)

Enviado em 20/01/2020 - 23:45h

Era as aspas simples mesmo, obrigado.
Mas quando testei fora do script funcionou com as aspas simples, que coisa.

marimbondo2 escreveu:

Essa variável $antigo, você quer substituir ela de dentro da expressão do sed?

Está faltando o sinal de '$' para indicar variável, e as variáveis não vão ser substituidas no meio de aspas simples. Neste caso, pode usar aspas duplas. Com 'g' no final da expressão do sed para alterar todas os alvos do arq.
[[ -n $antigo ]] && sed -i "s/$antigo/novo/g" arquivo





5. Re: Fora de script funciona e dentro não | sed -i 's/antigo/novo/' arquivo [RESOLVIDO]

hauck
hauck

(usa Nenhuma)

Enviado em 20/01/2020 - 23:54h

No caso, o 'g' vai susbtituir todas as ocorrências do $antigo no arquivo?
marimbondo2 escreveu:

Essa variável $antigo, você quer substituir ela de dentro da expressão do sed?

Está faltando o sinal de '$' para indicar variável, e as variáveis não vão ser substituidas no meio de aspas simples. Neste caso, pode usar aspas duplas. Com 'g' no final da expressão do sed para alterar todas os alvos do arq.
[[ -n $antigo ]] && sed -i "s/$antigo/novo/g" arquivo





6. Re: Fora de script funciona e dentro não | sed -i 's/antigo/novo/' arquivo [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 21/01/2020 - 01:50h

Isso mesmo, opção 'g' troca todas as ocorrências que casarem com a expressão no documento. Sem ela, o Sed só vai substituir a primeira ocorrência.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts