grep
pode fazer isso sozinho:
grep -rn --include='*.php' "pattern" .
precisa de um script / comando que liste todos os arquivos .php que tenham um padrão / string nele.
Ele deve examinar o diretório atual e todos os subdiretórios.
Seja ainda melhor se mostrar o número da linha como:
my new command
./www/index.php Line 12
./www/lib/config.php Line 123
Além disso, seria possível fazer uma pesquisa e substituir a linha em cada arquivo que tivesse esse padrão?
encontre. -name '* .php' -print0 | xargs -0 grep -n "padrão"
Eu acho que o seguinte irá fazer a busca e substituição, mas certifique-se de testar isso primeiro porque eu não tenho: -)
find . -type f -name '*.php' -print0 | xargs -0 sed -i '.bak' -e 's/foo/bar/g'
Isso fará o backup de cada arquivo antes de editá-lo, criando arquivos filename.php.bak e atualizando os registros de data e hora em todos os arquivos. Substitui 'foo' por 'bar'. Isso também deve ser seguro para nomes de arquivos com espaços.
find . -name '*.php' |xargs -I{} perl -i.bak -pe 's/pattern/replacement/' {}
Isto faz um achado de todo arquivo de php. Xargs, em seguida, executa o comando para cada entrada em STDIN passando o valor como {}
. Em seguida, Perl lê o arquivo, renomeia-o com a extensão .bak
e executa a expressão Perl em todas as linhas do arquivo.
Isto não serve para substituir o padrão?
encontre. -name "* .php" -exec sed -i ".bak" '/ pattern / replace / g' {} \;
Muito perigoso! Certifique-se de manter o padrão único. : -)
Use ack, melhor que o grep .
Vantagens (para mais, veja as 10 principais razões para usar ack em vez de grep):
Para operações de substituição, você pode usar o ack em combinação com perl ou sed.