Existe algum comando no Linux que encontre uma palavra específica em todos os arquivos de um determinado diretório e nas pastas abaixo e a substitua por uma nova palavra?
Responder1
Isso substituirá todos os arquivos. Pode ser mais específico se você precisar apenas de um tipo específico de arquivo. Além disso, ele cria um .bak
arquivo de backup de cada arquivo que processa, caso seja necessário reverter. Se você não precisar dos arquivos de backup, mude -i.bak
para -i
.
find /path/to/directory -type f -exec sed -i.bak 's/oldword/newword/g' {} \;
Para remover todos os arquivos de backup quando não precisar mais deles:
find /path/to/directory -type f -name "*.bak" -exec rm -f {} \;
Responder2
Você pode usar o seguinte comando:
grep -lR "foo" /path/to/dir | xargs sed -i 's/foo/bar/g'
Ele usa grep
para localizar arquivos contendo a string "foo" e então invoca sed para substituir "foo" por "bar" neles. Como resultado, apenas os arquivos que contêm "foo" são modificados. O resto dos arquivos não são tocados.
Responder3
Não é um único comando, mas uma combinação de vários:
find /home/bruno/old-friends -type f -exec sed -i 's/ugly/beautiful/g' {} ;
Exemplo deaqui
Responder4
Se você quiser mais controle, você pode usar um script python como: