[DICA]: Edição em lote (batch editing) de arquivos *.odt com bash e sed.

Iniciado por danpos, 27 de Fevereiro de 2009, 23:54

tópico anterior - próximo tópico

danpos

@All

Motivação:

Após três dias de trabalho para gerar 78 relatórios no openoffice, eu verifiquei que havia um erro de concordância em um parágrafo. Putz! Editar 78 arquivos 1 a 1 não era alternativa. Pesquisando achei essa fonte e fiz as adaptações necessárias e então cheguei a solução em apenas uma linha no terminal (bash).

Código (bash - uma linha no terminal)

for i in *.odt; do mkdir ./tmp; cd ./tmp; unzip -qq ../$i; sed -i 's/OQUEPROCURO/TROCA/' content.xml; zip -qq -r ../$i *; cd ..; rm -rf ./tmp; done

Neste código, "OQUEPROCURO" é o padrão procurado em cada relatório (no meu caso foi a palavra "encontrarem") e "TROCA" é o novo valor (no meu caso foi a palavra "encontrar"). O "sed -i" faz a modificação diretamente no arquivo (mais em "man sed" ou então baixando o ótimo livro - inacabado - do Aurélio Chagas).

Advertência:

Os arquivos *.odt não devem ter espaços em brancos no nome do arquivo (o unzip "chia"), talvez usando "" para cada $i faça a mágica mas não testei ...

Fica aí a dica ... ;)

Danpos.

Kamei Hyoga

Eu tenho a impressão que ainda vou usar essa dica um dia hehehe Vlw por ela

danpos

Citação de: Kamei Hyoga online 28 de Fevereiro de 2009, 04:03
Eu tenho a impressão que ainda vou usar essa dica um dia hehehe Vlw por ela

Eu também... ;D ;D O legal que dá para estendê-la através do sed, i.e., ao invés de procurar apenas por um padrão, poder-se-ia procurar (e trocar) por dois ou mais padrões (no meu problema era apenas para trocar 'uma coisa pela outra' ;) ).

Danpos.