Não tente colocar comandos em variáveis (por exemplo, " Como podemos executar um comando armazenado em uma variável? ").
Seu comando está tendo problemas com o $
porque o Perl o usa em suas variáveis escalares. Você teria que escapar não apenas do shell, mas também do Perl ( \\$
).
Para substituir abcd
por $test
em todos os arquivos dentro ou abaixo do diretório atual usando find
e GNU ou BSD sed
, use
find . -type f \
-exec grep -qF 'abcd' {} ';' \
-exec sed -i.bak 's/abcd/$test/g' {} ';'
Isso localizará todos os arquivos regulares, testará se a string existe no arquivo e, se houver, substituirá-a pela string $test
(criando um backup do arquivo original com o sufixo .bak
).
A mesma coisa, mas usando Perl:
find . -type f \
-exec grep -qF 'abcd' {} ';' \
-exec perl -pi.bak -e 's/abcd/$test/g' {} ';'
Se você remover a parte -exec grep
, obterá arquivos de backup para todos os arquivos, mesmo que eles não tenham contido a string abcd
.