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

3 Respostas to “Substituir texto em muitos arquivos – sed”

  1. semente Says:

    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. jorgecabralpt Says:

    Obrigado pela dica!

    De facto, fica mais simples…

  3. eu Says:

    zerou todos os arquivos mané!


Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s

%d bloggers like this: