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

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

Re: [shell-script] Re: Delimitadores de trecho de texto


From: jimmy
Subject: Re: [shell-script] Re: Delimitadores de trecho de texto
Date: Wed, 29 Oct 2008 18:41:33 -0200
User-agent: Mutt/1.4.2.3i

On Wed, Oct 29, 2008 at 08:03:32PM -0000, Cristiano Ferrari wrote:
> --- Em address@hidden, jimmy <ronaldo_tgz@...> 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.


reply via email to

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