[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/
- Pattern Matching : sed, grep, awk ....., Rodrigo F. Baroni, 2003/04/09
- Re: [shell-script] Pattern Matching : sed, grep, awk ....., Junior Barreto, 2003/04/10
- Re: [shell-script] Pattern Matching : sed, grep, awk ....., Thobias Salazar Trevisan, 2003/04/10
- Re: [shell-script] Pattern Matching : sed, grep, awk ....., aurelio, 2003/04/10
- Re: [shell-script] Pattern Matching : sed, grep, awk .....,
Rodrigo F. Baroni <=
- Re: [shell-script] Pattern Matching : sed, grep, awk ....., aurelio, 2003/04/10