команда поиска и замены для всего каталога

команда поиска и замены для всего каталога

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

решение1

Это заменит все файлы. Это можно сделать более конкретным, если вам нужен только определенный тип файла. Кроме того, он создает .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 {} \;

решение2

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

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' {} ;

Пример изздесь

решение4

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

Связанный контент