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
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?
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
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".
Tags bash linux shell-script