LINUX.ORG.RU

Поиск замена слова по текстовым файлам

 ,


0

1

Добрый вечер!

Никак не могу найти простое решение для следующей задачи: необходимо рекурсивно по директориям во всех файлах найти слово и заменить на другое слов.

Что-то вроде

./replace <dirname> white black

и во всех файлах, где было white появится black, даже superwhite должно стать superblack

★★

Ответ на: комментарий от beastie

Спасибо. Сколько не пытаюсь заставить себя выучить магию с find и xargs никак не могу)

olegk ★★ ()

Или так:

find /dir -type f -print0 | while read f; do sed -i 's/white/black/g' «$f»; done

Cancellor ★★★★☆ ()

Я так делаю:

find ./ -type f -exec sed -i 's/старое_слово_или_регексп/новое_слово/g' "{}" \;
Если используется регексп, часто использую ssed вместо sed, т.к. там перловые регекспы (правда иногда неадекватно всё же работают), мне они привычней. К find можно добавить ключ -name или -iname, чтобы ограничить поиск по определённым файлам по имени, например -name «*.html» для обработки только html файлов.

firestarter ★★★☆ ()
Последнее исправление: firestarter (всего исправлений: 1)
Ответ на: комментарий от helios

Правду говорю. В вашей деревне не слыхали про «индекс массы тела»?

true_hacker ()
Ответ на: комментарий от beastie

Странно отработало: если в одной строке два раза встретилось, то второе вхождение не заменило. Пришлось несколько раз запускать.

olegk ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.