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

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

Re: [shell-script] Pattern Matching : sed, grep, awk .....


From: Rodrigo F. Baroni
Subject: Re: [shell-script] Pattern Matching : sed, grep, awk .....
Date: Fri, 11 Apr 2003 13:31:41 -0300 (ART)


   Ola' Aurelio!

   Puxa, obrigadao pelo esclarescimento. Foi
util'issimo! Como eh bom esclarescer duvidas,
principalmente aquelas que tem estado roendo nossas
cabecas de vez em quando .. :)

   Pode apostar, vou comprar seu livro.

   Parabens pelo trabalho que vem fazendo. Sucesso!


 Rodrigo F Baroni
Computer Science Bach's Student


 --- aurelio <address@hidden> escreveu: > ae
thobias,
> 
> pessoal: desculpem o cross-posting pra sed-br, mas o
> assunto é
>          pertinente.
> 
>  --- Thobias Salazar Trevisan
> <address@hidden> escreveu: 
> > On Wed, 9 Apr 2003, Rodrigo F. Baroni wrote:
> > 
> > >      Por favor, alguem poderia explicar (ou
> indicar
> > > alguns links) sobre essa "simbologia" para
> cruzar
> > > pattern matching (expressoes regulares),
> utilizadas na
> > > vastidao dos *IX - como no sed, grep, ..etc; por
> > > exemplo no comando postado numa msg anterior :
> > >
> > > sed '/<a/,/>/{:a;s/\(href[^>]\+\)ç/\1c/g;ta;}'
> <--
> > 
> > posso tentar te explicar este sed:
> > 
> > /<a/,/>/, pegamos um intervalo, no caso de '<a'
> ateh '>'
> > e somente neste intervalo realizamos os demais
> comandos;
> > :a label
> > s/\(href[^>]\+\)ç/\1c/ substitui um grupo que
> contem href mais
> > qualquer caracter diferente de '>' repetidos pelo
> menos 1vez
> > ateh encontrar um ç. trocamos pelo grupo criado
> '\1' mais o
> > caracter c;
> > ta, se a substutuicao obteve sucesso, pula pro
> label a.
> > 
> > Acho que nao fui muito claro. 
> 
> grande thobias, se me permite a intromissão, deixa
> eu tentar
> ajudar.
> 
> rodrigo, o que o thobias fez nesse sed foi magia
> negra :)
> 
> a parte do endereço tudo bem, normal, mas na parte
> de trocar
> o 'ç' por 'c' é que ele usou uma tática avançada.
> 
> vamos usar um exemplo mais fácil que TAGs HTML nem
> sempre
> são didáticas. na string imaginária:
> 
>      Eu sou o sed. Sou meio complicadinho, mas sou
> limpinho.
> 
> o problema era algo como "trocar as letras 'o' por
> '#', mas
> somente entre o primeiro ponto final até encontrar a
> vírgula.
> fora disso deixa como está." então o resultado
> desejado seria:
> 
>      Eu sou o sed. S#u mei# c#mplicadinh#, mas sou
> limpinho.
> 
> a substituição normal 's/o/#/g' não se aplicaria
> neste caso,
> pois ela substituiria TODAS as letras 'o' da frase,
> inclusive
> as que estariam antes do ponto e após a vírgula.
> 
> para resolver isso, o que o thobias fez foi
> "ancorar" o escopo
> da substuituição na vírgula, de maneira que fora da
> área
> delimitada, nada fosse trocado. o comando dele nesse
> nosso
> exemplo seria:
> 
>    :loop  ;  s/\(\.[^,]\+\)o/\1#/  ;  t loop
> 
> o ':loop' é apenas uma marcação e o 't loop' é quem
> dizer pro sed
> voltar até aquela marcação. aqui fazemos um loop.
> 
> e no comando s/// está a mágica. vamos vê-lo sem os
> escapes e
> espaçado:
> 
>    s  /  (.[^,]+)o  /  \1#  /
> 
> então estamos procurando a partir de um ponto . tudo
> menos a
> vírgula ->  .[^,]+     seguido imediatamente de um
> 'o'.
> ou seja, este trecho: 
>    
>    . Sou meio complicadinh
> 
> e mais a letra 'o'. note que como o .[^,]+ foi
> colocado entre
> parenteses, isso formar um grupo. então toda a frase
> acima
> está "guardada" no grupo um (1).
> 
> depois tudo isso é trocado por \1#, sendo o \1 uma
> representação
> do conteúdo do grupo 1 e o # é um caractere normal.
> 
> pode parecer redundante (e é), mas estamos trocando:
> 
>    . Sou meio complicadinh + o
> 
> por:
> 
>    . Sou meio complicadinh + #
> 
> feito isso, o sed cai no loop e começa tudo de novo,
> dessa vez
> trocando:
>  
>     . Sou meio c  + o
> 
> por:
> 
>     . Sou meio c  + #
> 
> e assim vai, voltando ao começo da frase até
> acabarem as
> letras 'o' depois do ponto e antes da vírgula.
> 
> ufa! o sed do thobias faz exatamente a mesma coisa,
> só que
> os delimitadores deles ao invés de serem o ponto e a
> 
> vírgula são 'href=' e '>'. e ele chamou a marcação
> do loop
> de ':a'. compare:
> 
>         :loop  ;  s/\(\.[^,]\+\)o/\1#/     ;  t loop
>         :a     ;  s/\(href[^>]\+\)ç/\1c/g  ;  t a
> 
> blz?
> 
> 
> > Mas vc pode encontrar informacoes
> > sobre expressoes regulares online no livro de ER
> do aurelio ou
> > comprar o livro para ajuda-lo a ficar milionario!
> :-)
> 
> é! aí eu poderei dizer:
> 
>  - Sou o Sr. Aurélio o milionário. Possuo uma mansão
> e um hiate. :)
> 
> valeu a força thobias!
> 
> > Eh um livro exclusivo sobre o assunto. MUITO
> BOM!!!!
> > Da uma (ops) conferida:
> > http://www.verde666.org/er/
> > ops! novo link :)
> > http://aurelio.net/er/
> 
> pois é. eu ainda tou no atropelo da mudança, e conto
> com a
> ajuda de todos pra divulgar isso e arrumar todos os
> links
> que apontam pro sed-HOWTO, pras funções ZZ e
> outros...
> 
> se vir algum site (inclusive o meu!) com o link
> apontando pro
> verde666.org, avise o webmaster, ou me avise que eu
> tentarei
> entrar em contato com ele.
> 
> por enquanto ainda vai funcionar os dois endereços,
> mas atualizar
> é importante porque o verde666.org vence agora em
> junho e
> sairá fora do ar, então os links vão ficar
> QUEBRADOS.
> 
> desculpem a mensagem 1/2 ontopic 1/2 offtopic, mas
> eu quiz
> aproveitar o gancho e não importunar a lista depois.
> 
> falouzz!
> 
> 
> 
> =====
> -- 
> ATENCAO: o www.verde666.org vai morrer, use
> www.aurelio.net
> ATTENTION: www.verde666.org is no more, use
> www.aurelio.net
> 
>
_______________________________________________________________________
> Yahoo! Mail
> O melhor e-mail gratuito da internet: 6MB de espaço,
> antivírus, acesso POP3, filtro contra spam. 
> http://br.mail.yahoo.com/
> 
> 
>
---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras
> liguagens de programação, como perl, C etc. Quem
> insistir em não seguir esta regra será moderado sem
> prévio aviso.
>
---------------------------------------------------------------------
> Sair da lista:
> address@hidden
>
---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em
> http://www.listasdiscussao.cjb.net
>
---------------------------------------------------------------------
>  
> 
> Seu uso do Yahoo! Grupos é sujeito às regras
> descritas em: http://br.yahoo.com/info/utos.html 
> 
>  

_______________________________________________________________________
Yahoo! Mail
O melhor e-mail gratuito da internet: 6MB de espaço, antivírus, acesso POP3, 
filtro contra spam. 
http://br.mail.yahoo.com/


reply via email to

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