Re: [ot] sed localizar/substituir com caracteres especiais
Em 08/11/07, Denis<denismpa@gmail.com> escreveu:
> E ai pessoal, blz?
>
>
> bom, seguinte quero substituir isso:
>
> jjunior:$1$VyzzTIwz$/y750LY/2CQyKMD8ONlQY/:13816:0:99999:7
>
>
> por isso:
>
> jjunior:$2a$10$EA8yiucQjmLCZN/ogamxA.dsrDOGoo.gaytWYhbvCuUB/1TESTE
>
> isso eh p sincronizar o password do usuario entre 3 maquinas pega o
> mais recente e substitui o mais velho.
>
> fiz um script pra isso que esta ai abaixo, mas o problema sao as
> barras dentro da string do sed. Alguem sabe como contornar este
> problema?
>
> #!/bin/bash
> #programa para sincronizacao dos passwordsdos usuarios autor denis.
>
> for i in `diff -y --suppress-common-lines /etc/shadow
> /etc/shadow_new|tr -d [:blank:]|tr "|" "%"`;
> do
> echo atualizando o valor:
> echo $i
> read
> antigo=`echo $i |cut -d "%" -f 2`
> novo=`echo $i |cut -d "%" -f 1`
> echo "sera colocado $novo no lugar de $antigo no arquivo
> /etc/shadow_new \n"
> echo "Prosseguir?"
> read
> sed -i "s/$antigo/$novo/g" /etc/shadow_new
> done;
>
>
> tentei colocar as strings entr 'xx' e entre "xx" mas nao foi.
>
> valeu!
>
>
Simplesmente troque o separador do sed.
O sed aceita vários caracteres como separador dos seus campos, você
pode fazer por exemplo assim:
sed -i "s#$antigo#$novo#g" /etc/shadow_new
Desse jeito você consegue trabalhar facilmente com strings que
contenham barras.
Isso vale também para a substituição do vim.
--
Krishnamurti Lelis Lima Vieira Nunes
Reply to: