localiza e substitui o comando para o diretório inteiro

3

Existe algum comando no Linux que encontre uma palavra em particular em todos os arquivos em um determinado diretório e nas pastas abaixo e substitua-a por uma nova palavra?

    
por Jeegar Patel 17.08.2011 / 15:54

4 respostas

8

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 arquivo .bak backup de cada arquivo que ele processa, caso você precise reverter. Se você não precisar dos arquivos de backup, altere -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 você não precisar mais deles:

find /path/to/directory -type f -name "*.bak" -exec rm -f {} \;
    
por 17.08.2011 / 15:57
8

Você pode usar o seguinte comando:

grep -lR "foo" /path/to/dir | xargs sed -i 's/foo/bar/g'

Ele usa grep para encontrar arquivos contendo a string "foo" e depois chama sed para substituir "foo" por "bar". Como resultado, apenas os arquivos que contêm "foo" são modificados. O resto dos arquivos não são tocados.

    
por 17.08.2011 / 16:06
3

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 de aqui

    
por 17.08.2011 / 15:58
1

Se você quiser mais controle, você pode usar um script python como:

por 18.08.2011 / 19:20

Tags