--- Em shell-script@yahoogrupos.com.br, "Mauro" <mauro.bara...@...> 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.