shell-script-pt
[Top][All Lists]
Advanced

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

Re: [shell-script] sed com regex


From: address@hidden
Subject: Re: [shell-script] sed com regex
Date: Fri, 07 Nov 2008 12:00:37 -0200
User-agent: Thunderbird 2.0.0.16 (X11/20080723)


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 <address@hidden <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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]