On Wed, Oct 29, 2008 at 08:03:32PM -0000, Cristiano Ferrari wrote:
> --- Em [email protected], jimmy <[EMAIL PROTECTED]> escreveu
> > #!/usr/bin/sed -f
> > 
> > /^ *Ficha:/{
> >   :a;
> >   N;
> >   s/\n/; /;
> >   /; -----/{
> >     bb;
> >   }
> >   s/ \+/ /g;
> >   ba;
> > }
> > :b;
> > s/\n//g;
> > s/^ \+//;
> > 
> 
> Vixi jimmy, não consegui entender o comando.
> 
> Você poderia postar ele no http://pastebin.com para evitar que o yahoo
> quebre linhas e remova espaços em lugares indevidos?
> 
> ------------------------------------

vou descrever o que cada linha faz:

# busca por linhas que casem com o padrão: qualquer quantidade de
# espaços no começo + a string "Ficha:" e execute os comandos dentro
# dos colchetes
/^ *Ficha:/{ # 

# marca o trecho do código com um label de nome "a"
:a;

# junta a linha atual com a próxima (só assim é possível remover as
# quebras de linhas)
N;

# remove troca a quebra de linha por um "; " (poderia ser qualquer outra string)
s/\n/; /;

# caso encontre o padrão "; -----" que é a linha substituída com o
# separador de fichas execute o que estiver dentro do colchetes
/; -----/{

# faça um salto para o laber de nome "b"
bb;
}

# remova o excesso de espaços
s/ \+/ /g;

# pule para o label de nome "a" ( um looping para juntar todas as
# linhas, se não for feito o sed apenas junta a linha que tem "Ficha:"
# com a próxima)
ba;
}

# marca este trecho do código com um label de nome "b"
:b;

# essa linha nem era necessária nesse caso ...
s/\n//g;

# remove os espaços no começo das linhas
s/^ \+//;


a intenção era que o sed juntasse em uma linha cada bloco de linhas que
estivessem dentro das definições de que é uma "ficha", foi usado a
implementação de "goto" do sed.

manda um exemplo do que espera obter como saída que fica mais fácil
acertar o script.

Responder a