Comando sed com duas palavras [RESOLVIDO]

1. Comando sed com duas palavras [RESOLVIDO]

Joyce Arruda Recacho
joycerecacho

(usa Suse)

Enviado em 09/11/2012 - 16:24h

Pessoal, boa tarde!

Estou usando o comando sed com variáveis para fazer substituição.

Segue um exemplo do código:

sed 's/'$variavel1'/'$variavel2'/' arquivo.txt

Isso funciona perfeitamente quando conteúdo das variáveis possui apenas uma string.

Ex. variavel1 = Maria
variavel2 = Joao

Agora, quando essas variáveis assumem mais de uma string, dá erro.

Ex. variavel1 = Maria Eduarda
variavel2 = Joao Carlos

Como faço para que ele entenda por exemplo que, quando ele encontrar 'Maria Eduarda' terá que substituir por 'Joao Carlos'??

Obrigada desde já, galera.

Abraço,
Joyce


  


2. MELHOR RESPOSTA

Adriano Moreira da Silva
adri3d

(usa Arch Linux)

Enviado em 09/11/2012 - 16:40h

use "" para proteger o o texto

variavel1="Maria Eduarda"
variavel2="Joao Carlos"
sed 's/'"$variavel1"'/'"$variavel2"'/' arquivo.txt


3. Re: Comando sed com duas palavras [RESOLVIDO]

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 09/11/2012 - 16:28h

Vc deve acrescentar o barra invertida antes do caractere espaço. Ex.:


sed 's/Maria\ Eduarda/João\ Carlos/g' arquivo.txt


O lance é vc pegar a variável e acrescentar essa barra invertida, q não seria fácil...


4. Re: Comando sed com duas palavras [RESOLVIDO]

Joyce Arruda Recacho
joycerecacho

(usa Suse)

Enviado em 09/11/2012 - 16:35h

Ish... mas então, o conteúdo da variável é dinâmico sabe?
O exemplo dos nomes foi apenas ilustrativo.

:-/

Obrigada pelo retorno.

Se alguém tiver mais alguma sugestão... agradeço.

abraço
Joyce


5. Re: Comando sed com duas palavras [RESOLVIDO]

Joyce Arruda Recacho
joycerecacho

(usa Suse)

Enviado em 09/11/2012 - 16:40h

E assim, ao procurar as 'n' strings para substituí-las, quero que sejam encontradas como aparecem.

Ex.
variavel1 = 'Maria Eduarda'

Quero portanto procurar 'Maria Eduarda' e não só 'Maria' ou só 'Eduarda' ou ainda 'Eduarda Maria'.
Quero exatamente como aparece no conteúdo da variavel1.

Será possível??

Desde já agradeço.

Abraço,
Joyce


6. Re: Comando sed com duas palavras [RESOLVIDO]

Joyce Arruda Recacho
joycerecacho

(usa Suse)

Enviado em 09/11/2012 - 16:59h

FUNCIONOU!!!!!!!!!!!!!!!
:-D

Obrigada.
Era isso mesmo, tinha que colocar entre aspas!!

Obrigada!!


7. Re: Comando sed com duas palavras [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 09/11/2012 - 17:42h

Se suas strings não contiverem o caráter barra ("/"), você pode simplesmente fazer algo como sed "s/$var1/$var2/".

Se, no entanto, você suspeitar que as strings algum dia possam conter barras (ou outro caráter que vocẽ use como separador, já que o sed permite o uso de separadores diferentes do padrão), você terá um problema bem difícil de resolver com o sed.

Eu sempre acho melhor usar Perl do que sed. Se o seu sistema tiver Perl instalado, a forma mais segura de você trocar uma string por outra seria algo parecido com o que se segue (mas note que mesmo com Perl a solução não é muito bonita).

VAR1='alguma coisa'
VAR2='um negocio e/ou outro $$$$ qualquer'

cat <<EOM | perl -pe 'BEGIN { $v1=quotemeta(shift(@ARGV)); $v2=shift(@ARGV); } s/$v1/$v2/;' "$VAR1" "$VAR2"
alguma coisa
alguma coisa
1, 2, 3...
Ele abriu mao de alguma coisa.
EOM




  



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts