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 > >
