Você já precisou alguma vez substituir uma string por outra em diversos arquivos ao mesmo tempo? Caso utilize Linux, uma forma de fazer isso é utilizando os comandos find e sed em conjunto.
Por exemplo, para trocar a string xyz pela string abc em todos os arquivos com a extensão txt neste diretório e abaixo, o seguinte comando (de uma linha) pode ser utilizado:
find . -name "*.txt" -exec sh -c "cp -a {} {}.tmp; sed 's/xyz/abc/g' {}.tmp > {}; rm {}.tmp" \;
O que ocorre?
O find busca, neste diretório e abaixo, por todos os arquivos terminados em '.txt'. Para cada arquivo encontrado, chama um shell (sh) e neste: copia o arquivo para um arquivo temporário; executa, contra o arquivo temporário, o comando sed - com o parâmetro 's/xyz/abc/g', que serve para ler o arquivo e jogá-lo na saída padrão, com todas as ocorrências da string xyz substituídas por abc; direciona a saída padrão para o arquivo original; e exclui o arquivo temporário. E assim por diante, para cada arquivo que o find encontrar.
Em caso de dúvidas quanto ao find, consulte sua página de manual (man find). Quanto ao sed, por ser um comand muito abrangente e flexível, sua página de manual não é tão útil quanto algumas outras documentações encontradas na internet. Uma boa: http://aurelio.net/sed/sed-HOWTO.
Assinar:
Postar comentários (Atom)
Um comentário:
O que vc quer se resolve com um simples:
sed -i 's/xyz/abc/g' *.txt
A opção "-i" do sed faz com que a substituição seja feita no próprio arquivo.
Internamente, ele cria arquivos temporários e depois substitui os originais pelos temporários, com as modificações.
É mais rápido e mais simples do que usar o script sugerido
Postar um comentário