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