Я хочу заменить все файлы (например, foo.php ), которые содержат определенную строку 'bar' резервным файлом foo.php , который находится в ./backup/foo.php . Как я могу это сделать?

Я знаю, если я grep -lrI foo . все файлы будут перечислены, но как их заменить?

2 ответа2

1

Вы можете попробовать в следующем формате

Синтаксис :

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

Пример будет:

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

Это будет искать строку windows во всех файлах относительно текущего каталога и заменять «windows» на linux для каждого вхождения строки в каждом файле.

Дополнительное примечание из комментария : Разделитель прямой косой черты '/' в аргументе sed также может быть другим разделителем (например, символом «|»). Разделитель канала может быть полезен при поиске во многих HTML-файлах, если вы не хотите экранировать косую черту.

В дополнение к этому вы можете попробовать кев метод

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

Появления "foo" будут заменены на "bar".

1

Следующая строка bash подойдет, если вы просто хотите избавиться от этих файлов:

   for i in $(grep -lrI bar); do mv -i ./backup/`basename $i` $i; done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .