Штатными средствами через скрипт
Вот можно попробовать такой вариант:
find $PWD -type f -name '*.txt' -exec sed -i '' 's/искомое/чем заменяем/g' {} +
Для успешного выполнения нужно находится в каталоге с файлами, т.к. переменная $PWD - текущий каталог.
Здесь для получения списка файлов я использую find. Он находит файлы с расширением *.txt.
Как видишь в find есть опция -exec, которая позволяет выполнить любую команду столько раз, сколько файлов нашли.
Если у тебя файлы с разными расширениями, можно их поместить в одну директорию и потом заюзать
Подробнее про такой путь, к сожалению, сейчас не расскажу. Смысл в том, что xargs получает имена файлов от ls и выполняет для каждого из них указанную команду.
Все замены делаются с помощью текстового редактора sed. Проблемы могут быть в чем - в том, что sed реализован в разных системах по-разному. Во фряхе этот скрипт работает, в маке может запнуться на параметре -i (что, кстати, указывает на "in-place" замену). Если у тебя GNU sed, то после -i два апострофа не нужны.
Указанные способы имеют кучу проблем.
На этом я присоединяюсь к автору топика и задаю вопрос на засыпку:
какую альтернативу sed -i можно использовать, ведь -i есть не везде.
На разных форумах предлагают так:
sed 's/что ищем/чем меняем/g' $file > $tmp
mv $tmp $file
Это не подходит, т.к. беда этого подхода в том, что команда mv тупо делает замену файла, но не устанавливает предыдущие атрибуты.
У кого какие идеи?
Отредактировано gentooman (28-04-2010 00:43:56)