Use sedcom em findvez degrep
Antes de tudo, eu empregaria, finde não grep, e isso por três boas razões:
findpermite a seleção de arquivos mais precisa. Por exemplo, grep -r string *.txtproduzirá arquivos apenas no diretório atual; não aqueles em subdiretórios.
findvem com a -execopção poderosa que elimina a necessidade de toda a --null … |xargs 0construção.
- As opções
-readablee evitarão perder tempo em arquivos que não podem ser acessados.-writablefind
Teste de captura
Dito isto, greppresta-se a um primeiro teste para ver o que seria capturado:
$ find . -exec grep term1 {} \;
ou mais especificamente:
$ find . -type f -name '*.txt' -readable -writable -exec grep term1 {} \;
Funcionamento a seco
Agora, prossiga com uma sedcorrida a seco. A sedopção -né um sinônimo --quiete pno final da sedexpressão imprimirá o espaço do padrão atual.
$ find . -exec sed -n 's/term1/term2/gp' {} \;
ou mais especificamente:
$ find . -type f -name '*.txt' -readable -writable -exec sed -n 's/term1/term2/gp' {} \;
Execução
Se tudo estiver bem, emita o comando definitivo substituindo a sedopção -npor -i"in place" e removendo o pno final.
$ find . -exec sed -i 's/term1/term2/g' {} \;
ou mais especificamente:
$ find . -type f -name '*.txt' -readable -writable -exec sed -i 's/term1/term2/g' {} \;
Mais findexemplos
Mais findexemplos podem ser encontrados aqui .