4

Есть ли в Linux какая-либо команда, которая найдет определенное слово во всех файлах данного каталога и папок ниже и заменит его новым словом?

4 ответа4

9

Это заменит все файлы. Это может быть сделано более конкретно, если вам нужен только определенный тип файла. Кроме того, он создает файл резервной копии .bak для каждого файла, который обрабатывает, на случай необходимости возврата. Если вам не нужны файлы резервных копий, замените -i.bak на -i .

find /path/to/directory -type f -exec sed -i.bak 's/oldword/newword/g' {} \;

Чтобы удалить все файлы резервных копий, когда они вам больше не нужны:

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

Вы можете использовать следующую команду:

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

Он использует grep для поиска файлов, содержащих строку "foo", а затем вызывает sed для замены "foo" на "bar". В результате изменяются только те файлы, которые содержат "foo". Остальные файлы не тронуты.

3

Не одна команда, а комбинация нескольких:

find /home/bruno/old-friends -type f -exec sed -i 's/ugly/beautiful/g' {} ;

Пример отсюда

1

Если вы хотите больше контроля, вы можете использовать скрипт на Python, например:

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