[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: