Como procurar e substituir texto em todos os arquivos php em um diretório e seus subdiretórios

4

Estou procurando um script de shell que cruze recursivamente todos os arquivos .php em um diretório e realize uma pesquisa & substituir um padrão de texto específico.

O padrão de pesquisa é bastante longo (> 5000 caracteres), portanto, pode ser salvo em outro arquivo de texto para sua conveniência. Também contém caracteres de barra.

edite:  acho que descobri a primeira parte:

find . -name "*.php"

mas como posso pesquisar & substituir nesses arquivos?

    
por clamp 17.01.2012 / 08:58

3 respostas

5

Isso pode ser feito facilmente com uma boa combinação de sed e xargs.

find . -name "*.php" | xargs -n 1 echo

mostrará o poder dos xargs.

Depois disso, em um arquivo de amostra, você pode testar o regexp, com uma alteração no local (-i) ou uma alteração de backup (-i.bak). Você também pode usar um outro caractere para substituir '/' se seu padrão / substituição já tiver um.

No final, deve ser parecido com:

pattern='cat /path/to/pattern'; replacement='cat /path/to/replacement'
find . -name "*.php" | xargs -n 1 sed -i -e 's|$pattern|$replacement|g'
    
por 17.01.2012 / 10:40
5

Tente:

find . -name "*.php" -exec sed -i "s/$pattern/$replacement/g" {} \;

em que pattern é o padrão para procurar e replacement é o texto para o substituir.

A opção -i para sed edita os arquivos "no lugar". Se você quiser criar um backup do arquivo antes de editá-lo, use -i'.bak' .

    
por 17.01.2012 / 10:37
0
perl -p -i -e 's/originalString/targetString/g' 'find . -name '*' -type f'
    
por 18.01.2013 / 03:16