Como posso encontrar todos os arquivos que contêm uma string e depois substituir esses arquivos por outros?

0

Desejo substituir todos os arquivos ( foo.php como exemplo) que contêm determinada string 'bar' por um arquivo foo.php de backup, localizado em ./backup/foo.php . Como posso fazer isso?

Eu sei se grep -lrI foo . todos os arquivos serão listados, mas como substituí-los?

    
por MattPL 15.06.2015 / 16:10

2 respostas

1

A seguinte linha do bash serve, supondo que você só quer se livrar desses arquivos:

   for i in $(grep -lrI bar); do mv -i ./backup/'basename $i' $i; done
    
por 15.06.2015 / 16:30
1

Você pode tentar com o seguinte formato

Sintaxe :

grep -rl matchstring somedir/ | xargs sed -i 's/string1/string2/g'

O exemplo seria:

grep -rl 'windows' ./ | xargs sed -i 's/windows/linux/g'

Isso irá procurar a string windows em todos os arquivos relativos ao diretório atual e substituir 'windows' por linux para cada ocorrência da string em cada arquivo.

Nota adicional do comentário : O delimitador barra '/' no argumento sed também pode ser um delimitador diferente (como o caractere '|' do canal). O delimitador de pipe pode ser útil ao pesquisar em vários arquivos html se você não quiser escapar da barra.

Além disso, você pode tentar o método kev

cd /path/to/your/folder
sed -i 's/foo/bar/g' *

Ocorrências de "foo" serão substituídas por "bar".

    
por 15.06.2015 / 16:22