[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Re: Substituição com expressão regular
From: |
Mauro Baraldi |
Subject: |
Re: [shell-script] Re: Substituição com expressão regular |
Date: |
Tue, 13 Jul 2010 22:09:09 -0300 |
Olá pessoal.
Bem eu acho que não me expressei bem, mas como muitos do grupo já estão
acostumados com isso, eu diria que é até um exercício de regex entender o
que a galera pergunta aqui.
Perguntar as coisas em um momento de pressão é horrivel, pois provavelmente
você não passará todas a informações necessárias e ou incompletas.
A idéia é muito similar a tags, que na verdade não deixa de ser, só que
chamamos internamente de marcações. =P
Exemplo.
Texto: "Mais informações no site do projeto Gnome [1]"
O que eu faço, pego o [1] e coloco um _ depois do colchete que fecha ficando
assim: [1]_. Essa marcação é utilizada pelo txt2tags [2], justamente do
Marinho... =)
Mas eu tenho que "tagear" esses arquivos, então estou automatizando parte do
processo.
A ajuda dos Julio e do Cristiano foram muito boas. Obrigado aos 2 Mas como
eu mesmo esperava, eu achei a solução a partir da dica dos 2.
Como disse, uso o Geany [3], e ele tem um suporte a busca e substituição por
regex. Graças aos agrupamentos e o retrovisor em regex eu busco e substitu
as "marcações" assim:
Find: (\[[1-9]\])
Replace: \1_
E os outro padrões ficaram assim:
Find: (figura [1-9])
Replace: ??\1??
Resultado = (??figura 1??)
Resumindo, a solução foi mais fácil que imaginei, e mais simples que as
propostas.
Desculpem o texto gigante, seria mais fácil ter blogado a resposta, mas
pensei que seria interessante compartilhar a solução até mesmo pela
simplicidade da solução. =)
[1] www.gnome.org
[2] http://txt2tags.sourceforge.net/
[3] http://www.geany.org/
[ ]'s
Mauro Navarro Baraldi
address@hidden
Skype: mauro.baraldi
Celular: +55 11 67370053
Fone: +55 11 36752600
Good thoughts are no better than good dreams, unless they be executed.
2010/7/13 Cristiano <address@hidden>
>
>
>
>
> --- Em address@hidden <shell-script%40yahoogrupos.com.br>,
> "Mauro" <mauro.baraldi@...> escreveu
>
> >
> > Boa tarde senhores.
> >
> > Tenho alguns arquivos que tenho que alterar partes deles seguindo um
> padrão mas não estou conseguindo encontrar um caminho por ser algo un tanto
> quanto específico.
> >
> > Um exemplo é o seguinte.
> >
> > Original: [1]
> > Alterado: [1]_
> >
> > Mas o conteúdo de dentro dos colchetes pode alterar, tanto o caracter
> como a quantidade de caracteres ([2] ou [35]). E ainda há outras padrões
> como:
> >
> > Original: (fonte 2)
> > Alterado: ??(fonte 2)??
> >
> > Encontrar o padrões não é o problema. A dificuldade é manter o "meio"
> intacto e mudar o resto.
> >
> > Eu estou usando um editor de textos gráfico, o Geany para ser mais
> específico, mas se postarem exemplos ou dicas com sed eu me viro para
> adaptar.
> >
> > [ ]'s
> > Mauro Baraldi
> >
>
> Mauro, você pode usar o sed e o conceito de grupos e, como chama o Aurélio,
> retrovisores, das expressões regulares.
>
> Antes de mais nada dá uma olhada na teoria:
>
> Sobre os grupos:
> http://guia-er.sourceforge.net/grupo.html#2_4_3
>
> Sobre o 'retrovisor':
> http://guia-er.sourceforge.net/retrovisor.html
>
> Para resolver seu problema, crie uma ER com 3 grupos, sendo uma primeira
> parte composta de um grupo que case com o início da linha até o primeiro
> colchete, uma segunda parte intermediária que case com o número entre os
> colchetes, ou seja, a parte que você quer manter, e uma última parte casando
> com a parte que vai do seguindo colchete até o fim da linha.
>
> Use o comando se substituição do sed (s) para substituir a ER composta
> pelos 3 grupos por "algo novo" + grupo 2 + "outro algo novo".
>
> Tenta montar a ER e se, não conseguir, poste para a gente.
>
> 2 dicas de antemão, que lhe pouparão tempo:
>
> 1) use o grep (ou egrep) para testar a ER, com a opção --color=auto. É mais
> fácil de testar o casamento (ou não) da ER do que direto pelo sed.
>
> 2) Atente para os caracteres especiais (metacaracteres) ao construir seu
> padrão. Colchetes e parênteses possuem superpoderes nas expressões regulares
> e precisam ser devidamente escapados para serem corretamente casados.
>
> Mais sobre como 'escapar' estes caracteres em:
>
> http://guia-er.sourceforge.net/escape.html#2_4_1
>
> Atente também para o fato de que o grep e o sed tratam os metacaracteres de
> maneira diferente do egrep. Portanto, se seu padrão casar com o egrep e os
> metacaracteres não forem corretamente escapados no sed, seu código irá
> falhar.
>
> Leia mais sobre isso no item 19 do canivete do Aurélio:
>
> http://aurelio.net/shell/canivete.html
>
> Se não conseguir montar a ER, posta para a gente o que você tentou.
>
>
>
[As partes desta mensagem que não continham texto foram removidas]