Perl: добавить новую директиву в файл виртуального хоста Apache - PullRequest
1 голос
/ 14 марта 2012

Для шаблона, который выглядит следующим образом:

<VirtualHost 127.0.0.1:81>
  Directive1
  Directive2
</VirtualHost>

Я хочу вставить новую строку со строкой Directive3 перед </VirtualHost>.Обратите внимание, что они могут содержать несколько объявлений <VirtualHost/> в файле, но все они имеют уникальную пару IP: PORT.Это то, что у меня пока есть:

perl -p -i -e 's/(<VirtualHost 127\.0\.1\.1:81>[^(<\/VirtualHost>)+])(<\/VirtualHost>)/$1\n\tDirective3\n$2/ims' $file

Что в разбивке дает:

  • имеет <VirtualHost 127.0.0.1:81>
  • , за которым следует
  • имеетвсе, кроме </VirtualHost>
  • , за которым следует
  • </VirtualHost>

Но это ничего не соответствует: (...

Любая идея

1 Ответ

1 голос
/ 14 марта 2012

perl -p читает файл по одной строке за раз.Вы можете использовать -0777 для чтения всего файла.

Или вы можете использовать что-то вроде:

perl -pE '(/<VirtualHost +127\.0\.0\.1:81>/ .. /<\/VirtualHost>/) =~ /E/ and say "\tDirective3"'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...