On Tue, Jun 30, 2009 at 06:37:26PM -0300, Alain Mouette wrote:
> Oi Jimmy, estou aproveitando para aprender :)
>
> jimmy escreveu:
> >> mas deve ter como só imprimir as linhas que foram editadas, certo?
> > você pode usar o parâmetro "-n" no sed e colocar um "p" no final do
> > comando:
> >
> > sed -n
'/^Reference/N;s/[^=]\+=\s\+\([^;]\+\);[^=]\+=\s\+\([^;]\+\);/\1,\2/p' arquivo
>
> Ok, este eu entendi :) - "-n" é para não imprimir, e o "p" imprime as
> linhas que interessam...
>
> > ou usar um "!d" para apagar todas as outras linhas:
> >
> > sed
'/^Reference/N;/[^=]\+=\s\+\([^;]\+\);[^=]\+=\s\+\([^;]\+\);/!d;s//\1,\2/'
arquivo
>
> Este eu não entendi... o que é a "!" ??
> e também não está fazendo na sequencia normal (vou resumir porque está
> confuso):
> 1) Seleciona a linha co Referencia e acrescenta a próxima linha. fica
> com "\n" e tudo no buffer. Acho que essa eu entendi.
era isso mesmo.
> 2) tem uma expressão regular que parece que não faz nada nas define as
> variáveis 1 e 2. É isso?
ela é usada como endereço (info sed Addresses) para os comandos "!d",
aproveitando para definir as backreferences "\1" e "\2" (info sed
'Extended regexps'), para usarmos mais adiante
> 3) deleta, mas com o "!" que não entendi o que faz
o "!" diz ao comando "d" para _não_ apagar aquele pattern space, e pela
forma como o usamos só vai sobrar aquele pattern space.
> 4) como o buffer ficou vazio, substitui o nada pelo que eu quero usando
> as variáveis da expressão anterior. Não entendi porque elas não foram
> apagadas...
o pattern space não ficou vazio, nesse ponto o comando "d" apagou
tudo, _exceto_ as linhas que nos interessam; sendo assim o
comando de substituição que termina o script faz o seu trabalho
usando como referência a última regexp em que houve match, incluindo
as backreferences definidas nela.
> Me dê uma luz...
>
> Abraços,
> Alain
> ------------------------------------
--
"Não manejo bem as palavras
Mas manipulo bem as strings."
------------------------------