1

Тема: Автозамена

Всем привет
С FreeBSD работаю не так давно, помогите пожалуйста.
Есть несколько десятков файлов (обчный текстовый файл, прочитать моно через ee)
в них необходимо произвести замену "xxx" на "yyy".
Как это сделать штатными средствами? пробовал через MC,
но там так нельзя заменить...Может как нить через скрипт???
У меня иксов нет -)

2

Re: Автозамена

Штатными средствами через скрипт smile
Вот можно попробовать такой вариант:

find $PWD -type f -name '*.txt' -exec sed -i '' 's/искомое/чем заменяем/g' {} +

Для успешного выполнения нужно находится в каталоге с файлами, т.к. переменная $PWD - текущий каталог.

Здесь для получения списка файлов я использую find. Он находит файлы с расширением *.txt.
Как видишь в find есть опция -exec, которая позволяет выполнить любую команду столько раз, сколько файлов нашли.

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

ls | xargs ...

Подробнее про такой путь, к сожалению, сейчас не расскажу. Смысл в том, что 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)

3

Re: Автозамена

Так....давайте подвидём итоги....
В стандартных прогах работиюющих под консоль нет функции которая позволя бы производить автозамену ключевого слова в файлах и подкаталогах....А, может быть всё таки есть такая прога, но к сожаления названия мы не услышали....Остаёться вариант написания скрипта под shell...Мне казалось, что FreeBSD насегодня самая совершенная ОС. И решиние проблемы подобной рода пустиковое дело...Оказалось не так, печально.

4

Re: Автозамена

mitsumoto, напишите скрипт и будет пустиковое дело. Я смотрю вы вообще хотите чтобы все делалось без вашего участия. А вы бы только получали денег.

5

Re: Автозамена

mitsumoto пишет:

Всем привет
С FreeBSD работаю не так давно, помогите пожалуйста.
............
У меня иксов нет -)

отсюда и вывод. Прежде чем говорить "Печально" о предмете, убедитесь в своей образованности в области познания данного предмета.

6

Re: Автозамена

Люди Помогите как мне заменить в файле 2 солово ххх на слово из файла 1 солово ууу. Как Это сделать подскажите ??

7

Re: Автозамена

Замена производится в одном файле или несколько файлов?
Слово "ууу", мне понятно, а зачем "слово из файла 1"?

8

Re: Автозамена

Я что то упустил в этой жизни?

find /var/www/vhosts/*/phpcgi/ -name php.ini| awk '{print "sed \"s/memory_limit = 32M/memory_limit = 64M/\" "$1" > "$1"_sed ; mv -f "$1"_sed "$1" ; rm -f "$1"_sed"}'|sh

Ищим файл php.ini и меняем значение memory_limit с 32M на 64M

mitsumoto пишет:

Так....давайте подвидём итоги....
В стандартных прогах работиюющих под консоль нет функции которая позволя бы производить автозамену ключевого слова в файлах и подкаталогах....А, может быть всё таки есть такая прога, но к сожаления названия мы не услышали....Остаёться вариант написания скрипта под shell...Мне казалось, что FreeBSD насегодня самая совершенная ОС. И решиние проблемы подобной рода пустиковое дело...Оказалось не так, печально.