comando localizar e substituir para todo o diretório

comando localizar e substituir para todo o diretório

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 .bakarquivo de backup de cada arquivo que processa, caso seja necessário reverter. Se você não precisar dos arquivos de backup, mude -i.bakpara -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 greppara 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

informação relacionada