Monthly Archives: Сентябрь 2016

Как в Linux найти и рекурсивно заменить строку во всех файлах?

Допустим нам требуется заменить email: root@mail.domain.ru на sf@nagg.ru во всех файлах в каталоге /home/www. Наиболее оптимальным вариантом выглядит следующая конструкция:
find /home/www -type f -print0 | xargs -0 sed -i 's/root@mail\.domain\.ru/sf@nagg.ru/g'
В данной конструкции используется print0, ниже выдержка из man find:
-print0 (GNU find only) tells find to use the null character (\0) 
instead of whitespace as the output delimiter between pathnames found. 
This is a safer option if you files can contain blanks or other special character. 
It is recommended to use the -print0 argument to find if you use -exec command or xargs 
(the -0 argument is needed in xargs.).
После выполнения, мы можем проверить что root@mail.domain.ru более нигде не прописан (файлов в выводе не должно быть):
grep -rl 'root@mail.domain.ru' /home/www/
Продолжить чтение