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: Mon, 10 Sep 2007 15:16:53 -0300

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> 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]