Autor Tópico: [DICA]: Edição em lote (batch editing) de arquivos *.odt com bash e sed.  (Lida 3046 vezes)

Offline danpos

  • Usuário Ubuntu
  • *
  • Mensagens: 386
    • Ver perfil
@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)

Código: [Selecionar]
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.

Offline Kamei Hyoga

  • Usuário Ubuntu
  • *
  • Mensagens: 1.095
  • Ubuntu 11.04
    • Ver perfil
Re: [DICA]: Edição em lote (batch editing) de arquivos *.odt com bash e sed.
« Resposta #1 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

Offline danpos

  • Usuário Ubuntu
  • *
  • Mensagens: 386
    • Ver perfil
Re: [DICA]: Edição em lote (batch editing) de arquivos *.odt com bash e sed.
« Resposta #2 Online: 28 de Fevereiro de 2009, 07:02 »
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.