Bom Dia!

Talvez voce poderia usar um duplo sed com o pipe. Utilizando a opcao "d"

# sed '/current_date+/d' $FILE | s/current_date/current_date-2/g' $FILE 
 > new_file

Abs,
Marcus Duarte


Arthur M. Meskelis escreveu:
>
> 2008/11/7 Cristiano Ferrari <[EMAIL PROTECTED] 
> <mailto:boxferrari%40gmail.com>>:
> > Ilustre, bom dia.
> >
> > Tenho um diretório com "trocentos" scripts SQL. Em alguns deles, que
> > não sei quais são, há o texto "current_date".
> >
> > Preciso criar um script que processe este diretório e troque todos os
> > "currente_date" por "current_date-2".
> >
> > Isso, em tese é facil:
> >
> > # for *sql in FILE ; do sed 's/current_date/current_date-2/g' $FILE >
> > "novo-"$FILE ; done
> >
> > Até aí tudo tranquilo.
> >
> > O problema é que nestes arquivos tem algumas declações
> > 'current_date+1' que eu não posso mudar e seu eu usar o comando
> > anterior, irão ficar 'current_date-2+1', que é errado.
> >
> > Pensei então em usar a lista negada assim:
> >
> > sed 's/current_date[^+]/current_date-2/g'
> >
> > Assim, não caso com o current_date+1, mas caso com "current_date," ou
> > "current_date)", removendo a vírgula ou o parênteses que fazem parte
> > da estrutura da query.
> >
> > Sei que a solução é simples, mas não estou conseguindo "sair do 
> quadrado".
> >
> > Será que alguém poderia me dar uma idéia de como eu poderia trocar
> > todos os current_date, exceto aqueles sucedidos por um caracter de '+'?
> >
> > Att.
> >
> > Cristiano
>
> olha só
>
> $ cat teste_20081107
> current_data,
> current_data)
> current_data+1
>
> $ sed 's/current_data\([^+]\)/current_data-2\1/g' teste_20081107
> current_data-2,
> current_data-2)
> current_data+1
>
>  

Responder a