Como eu faço uma string substituir em todos os arquivos PHP recursivamente no Linux?

3

Eu tenho um nome de função que foi digitado incorretamente e quero alterá-lo. A função é chamada em muitos lugares do projeto.

Como posso fazer isso com um comando do Linux em SUSE ?

    
por Peter Mortensen 14.10.2009 / 14:02

4 respostas

4

Você pode usar uma combinação de find , xargs e sed :

find ./ -type f -name "*.php" | xargs sed -i 's/\<oldfunction\>/newfunction/g'
    
por 14.10.2009 / 14:04
2

Uma variante feita com Perl :

find . -type f -name "*.php" -print0 | xargs -0 perl -pi.bak -e 's/oldfunction/newfunction/g'

Uma vantagem é que o Perl criará os arquivos de backup (com .bak extension) para que, se você estragar tudo, possa reverter.

(A opção -print0 para encontrar e a opção -0 para xargs são necessárias apenas se você tiver alguma arquivos ou diretórios com espaços neles.)

    
por 14.10.2009 / 16:56
1

Isso é exatamente a mesma coisa que a solução de John T:

find ./ -type f -name "*.php" -exec sed -i 's/\<oldfunction\>/newfunction/g' {} \;

Eu normalmente não canalizo para xargs

EDIT: mais caro .... por comentários abaixo.

    
por 14.10.2009 / 15:23
0

Suplemento a outras sugestões muito boas já postadas: faça um backup de todo o site (cp -r / var / www / var / wold) e faça a edição lá. Pessoalmente, eu mudaria os arquivos modificados, por exemplo, / var / www / changed e testaria o link para garantir que todos os scripts funcionem antes de ir viver.

    
por 15.10.2009 / 19:07