Outras soluções combinam sintaxes regex. Para usar padrões de perl / PCRE para ambos pesquisa e substituição, e somente os arquivos de correspondência de processos, isso funciona muito bem:
grep -rlZPi 'match1' | xargs -0r perl -pi -e 's/match2/replace/gi;'
onde match1e match2geralmente são idênticos, mas match1podem ser simplificados para remover recursos mais avançados que são relevantes apenas para a substituição, por exemplo, grupos de captura.
Tradução: greprecursivamente e liste os arquivos que correspondem a esse padrão PCRE, separados por nul para proteger caracteres especiais no nome do arquivo e canalize os nomes de arquivos nos xargsquais está esperando uma lista separada por nulos, mas não fará nada se nenhum nome for recebido, e perlsubstitua as linhas onde as correspondências são encontradas.
Adicione a Iopção greppara ignorar arquivos binários. Para correspondência com distinção entre maiúsculas e minúsculas, solte o icomutador de grepe o isinalizador anexado à expressão de substituição, mas não o icomutador em perlsi.