Use sed
com em find
vez degrep
Antes de tudo, eu empregaria, find
e não grep
, e isso por três boas razões:
find
permite a seleção de arquivos mais precisa. Por exemplo, grep -r string *.txt
produzirá arquivos apenas no diretório atual; não aqueles em subdiretórios.
find
vem com a -exec
opção poderosa que elimina a necessidade de toda a --null … |xargs 0
construção.
- As opções
-readable
e evitarão perder tempo em arquivos que não podem ser acessados.-writable
find
Teste de captura
Dito isto, grep
presta-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 sed
corrida a seco. A sed
opção -n
é um sinônimo --quiet
e p
no final da sed
expressã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 sed
opção -n
por -i
"in place" e removendo o p
no 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 find
exemplos
Mais find
exemplos podem ser encontrados aqui .