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

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

Re: [shell-script] Obter texto contido num padrao


From: Tiago Barcellos Peczenyj
Subject: Re: [shell-script] Obter texto contido num padrao
Date: Tue, 11 Sep 2007 23:28:32 -0300

Ops... parece que eu esqueci um detalhe

ja corrigi

BEGIN{IN = 0}  # IN representa o meu estado
/textcolor/ && IN == 0{
        IN=1

        color = "textcolor{xxx}{"

        printf "%ds/\\\\%s//;\n",NR,color

        i = match($0,color);

        $0 = substr($0,i+RLENGTH)
}
IN != 0 {
        total =0;
        while(match($0,"[{}]")){
                i=RSTART
                total += i # tcharam :)
                IN += (substr($0,i,1) == "{") ? 1 : -1

                if (IN == 0){
                        total-- # e aqui tb !
                        printf "%ds/^\\(.\\{%d\\}\\)}/\\1/;",NR,total
                        break
                }
                $0=substr($0,i+1)
        }
}

On 9/10/07, Salviano de Araujo Leão <address@hidden> wrote:
>
>   On Monday 10 September 2007 15:16:53 Tiago Barcellos Peczenyj wrote:
>
> Valeu Thiago, não conheço awk, mas vou ler algo para me inteirar.
> Surpreendentemente no caso de linhas contendo somente expressões:
>
> \section*{ \textcolor{red}{Argumentos Matriciais 4} }
>
> ele se perdeu fornecendo somente.
>
> \section*{ Argumentos Matriciais 4} }
>
> Uma outra questão. Já que está em awk como ficaria um
> loop para que eu pudese trocar todas as cores, ou seja,
> xxx poderia ser qualquer um dos valores blue, red, yellow, etc,
> de uma lista.
>
>
> > Vejamos
> >
> > Partindo do exemplo do texto:
> >
> > $ cat texto
> > \textcolor{xxx}{Texto texto1 \emph{texto2 \footnote{texto3}}
> > texto4 \emph{texto5} texto6 \textsf{texto7} texto8
> > texto9. }
> >
> > Eu uso o AWK para gerar comandos do SED
> >
> > $ awk -f remove.awk texto
> > 1s/\\textcolor{xxx}{//;
> > 3s/^\(.\{8\}\)}/\1/;
> >
> > Eu posso então testa-lo no arquivo:
> >
> > $ awk -f remove.awk texto | sed -f - texto
> > Texto texto1 \emph{texto2 \footnote{texto3}}
> > texto4 \emph{texto5} texto6 \textsf{texto7} texto8
> > texto9.
> >
> > Humm... parece bom :)
> >
> > Vejamos o que eu fiz (remove.awk)
> >
> > BEGIN{IN = 0} # IN representa o meu estado
> > /textcolor/ && IN == 0{
> > IN=1
> >
> > color = "textcolor{xxx}{"
> >
> > printf "%ds/\\\\%s//;\n",NR,color
> >
> > i = match($0,color);
> >
> > $0 = substr($0,i+RLENGTH)
> > }
> > IN != 0 {
> > while(match($0,"[{}]")){
> > i=RSTART
> >
> > IN += (substr($0,i,1) == "{") ? 1 : -1
> >
> > if (IN == 0){
> > printf "%ds/^\\(.\\{%d\\}\\)}/\\1/;\n",NR,i - 1
> > break
> > }
> > $0=substr($0,i+1)
> > }
> > }
> >
> > Vou resumir: o problema re resume a retirar parte do texto
> > "\textcolor{xxx}{" e a respectiva "}" que fecha esse texto.
> >
> > O começo, via SED, é facil, dificil é remover a respectiva "}" ... não
> sei
> > como fazer com SED, mas com awk é facil, vc procura todas as ocorrencias
> de
> > { ou } e vai contando. toda vez que aparecer um { eu adiciono um valor,
> e
> > todo } eu subtraio. Controlo isso no atributo IN -- ou seja, quando
> maior o
> > valor de IN, mais "dentro" eu estou dos { { } }
> >
> > Sabendo a posição e linha do ultimo } que quero eliminar, fica facil.
> >
> > Eu poderia fazer tudo via AWK, porém... pensei em apimentar um pouco
> essa
> > relação. Perceba que é facil usar apenas AWK, porem gerar codigo SED a
> > partir do AWK pode ser vantajoso também :)
> >
> > On 9/10/07, Salviano de Araujo Leão 
> > <address@hidden<salvianoleao%40yahoo.com.br>>
> wrote:
> > > Olá a todos
> > >
> > > Tenho textos LaTex do tipo:
> > >
> > > \textcolor{xxx}{Texto texto1 \emph{texto2 \footnote{texto3}}
> > > texto4 \emph{texto5} texto6 \textsf{texto7} texto8
> > > texto9. }
> > >
> > > Gostaria que ele ficasse da seginte forma:
> > >
> > > Texto texto1 \emph{texto2 \footnote{texto3}}
> > > texto4 \emph{texto5} texto6 \textsf{texto7}
> > > texto8 texto9.
> > >
> > > Eu quero remover a seqüência \textcolor{xxx}{TEXTO}
> > > preservando o texto dentro. Entretanto eu não sei
> > > quantos ninhos de chaves TEXTO pode conter.
> > >
> > > Acredito que há uma solução com o sed.
>
>  
>



-- 
Tiago B Peczenyj
Linux User #405772

http://peczenyj.blogspot.com/


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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