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)
Ответ на: комментарий от true_hacker

У меня, к Вашему сведению, оптимальное соотношение рост/вес.

И оливковый цвет кожи... Знаем таких.

helios ★★★★★
()
Ответ на: комментарий от helios

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

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

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

olegk ★★
() автор топика

sed -i 's/white/black/g' **/*

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