Назад | Перейти на главную страницу

Сценарий оболочки - как заменить линии

Ubuntu 9.10

Привет, ребята,

Я хочу создать сценарий, который будет автоматически обновлять одну строку в файле .htaccess. Не мог бы кто-нибудь указать мне на некоторые инструкции по созданию базового скрипта «найти и заменить»?

Я представляю себе что-то, что в основном гласит: «Найдите специальные маркеры #ABC и #XYZ ... удалите записи между маркерами и замените их на 'foo'».

Вы хотите sed: sed -i s/regex to look for/string to replace it with/

Если требуется, чтобы он состоял из нескольких строк, вы можете писать более сложные сценарии, хотя в какой-то момент мощность и краткость sed начинают работать против него, и я предпочитаю писать более подробным, но в целом понятным языком сценариев (я предпочитаю Ruby , но вкусы разнятся).

Если вы приведете реальный пример того, чего пытаетесь достичь, кто-то, вероятно, сможет придумать «лучший» способ сделать это; на данный момент ваш пример очень расплывчат, чтобы дать конкретное решение.

Если ваши файлы маленькие (я думаю, что должен быть .htaccess), то Perl может их "проглотить" и работать со всем как с единой строкой, используя s /// s (модификатор 's' в конце обрабатывает вся строка как одна строка).

Пример: perl -i.bak -p -0 -e 's / # ABC \ n. * # XYZ / foo / s' список имен файлов

-i.bak сообщает Perl сохранять резервные копии, в этом случае он называется list.bak of.bak file.bak names.bak -p -0 сообщает perl о том, что нужно проглотить весь файл, а -e говорит ему применить регулярное выражение к команде линия.

Эта конкретная версия заменит только первый набор маркеров и ничего не сделает, если маркеры вообще не существуют (но она все равно создаст файлы резервных копий).

Попробуй это:

awk '/^#ABC/ {start=1; print; next} /^#XYZ/ {start=0; print "foo"; print; next} start!=1 {print}' .htaccess > .htaccess.NEW

Его можно сократить до:

awk '/^#ABC/ {start=1; print; next} /^#XYZ/ {start=0; print "foo"} start!=1 {print}' .htaccess > .htaccess.NEW