Por vezes precisamos de substituir um mesmo texto em vários arquivos de uma vez. Por exemplo, actualizar um contacto telefónico em vários ficheiros.
É uma tarefa árdua em alguns sistemas operativos principalmente se houver muitos ficheiros para alterar, no Linux torna-se fácil, basta usarmos o sed.
A solução é executar um scriptshell com o seguinte:
for ARQ in *; do echo $ARQ; mv "$ARQ" "$ARQ.bak"; sed
"s/textoantigo/textonovo/g" "$ARQ.bak" > "$ARQ"; done
ou ainda, usando o find com a opção -exec, podemos aplicar às subpastas:
find . -type f -exec bash -c 'echo "{}"; mv "{}" "{}.bak"; sed
"s/textoantigo/textonovo/g" "{}.bak" > "{}"' \;

14.06.2007 às 20:35
Opa,
Dê uma olhada no parâmetro -i dos novos sed. Isso modificará os arquivos “in place”, ou seja, não precisará utilizar um bash e nem o comando mv. Ficará muito mais eficiente e o comando mais simples. Ainda mais, tem como gerar um backup.
Até!
14.06.2007 às 21:58
Obrigado pela dica!
De facto, fica mais simples…