Substituir texto em muitos arquivos – sed

23.05.2007

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" > "{}"' \;

2 Respostas para “Substituir texto em muitos arquivos – sed”

  1. semente Diz:

    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é!


  2. Obrigado pela dica!

    De facto, fica mais simples…


Deixar uma Resposta