Измените конфигурацию tomcat server.xml, используя sed - PullRequest
2 голосов
/ 29 октября 2011

Я делаю пакет Ubuntu, который зависит от Tomcat7 через HTTPS.Для удобства наших клиентов я бы хотел, чтобы скрипт установки пакета включил HTTPS в Tomcat7.Это довольно легко сделать вручную;в файле /etc/tomcat7/server.xml необходимо раскомментировать следующий блок:

<!--
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
           maxThreads="150" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS" />
-->

Как я могу сделать это из сценария оболочки?Предпочтительно таким образом, что он все еще работает для небольших модификаций точного шаблона.Я думаю, что правило будет что-то вроде search for '<Connector port="8443"', а затем удалить <!-- и --> до и после блока.

Ответы [ 3 ]

7 голосов
/ 29 октября 2011

Попробуйте применить исправление к вашему server.xml.

  1. Создание файла исправления:

    diff -ruN server.xml.old server.xml.new > mydiff.patch
    

    Где server.xml.old - исходный файл, а server.xml.new - это файл, который вы хотите.

    Патч (mydiff.patch) будет выглядеть так:

    --- server.xml.old  2011-10-29 04:03:25.000000000 -0300
    +++ server.xml.new 2011-10-29 04:04:03.000000000 -0300
    @@ -1,10 +1,10 @@
     (...)
    
    - <!--
      <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
                maxThreads="150" scheme="https" secure="true"
                clientAuth="false" sslProtocol="TLS" />
    - --->
    
     (...)
    
  2. Затем просто примените патч:

     patch server.xml mydiff.patch
    

    Вы можете запустить команду patch с флагом -N.Таким образом, он будет пропускать файлы, которые уже исправлены.

1 голос
/ 29 октября 2011

diff, скорее всего, должен быть инструментом по вашему выбору.Но если исходный файл конфигурации часто меняется, diff не сможет применить ваш скрипт в будущих версиях.

sed также может читать более одной строки.Возможно, вы захотите взглянуть на этот пример , который также касается изменения XML-документа.

0 голосов
/ 29 октября 2011

Это может сработать:

 sed -nr '/^<!--/,/^-->/!{p;b};/^<!--/{h;d};H;/^-->/{x;/<Connector port="8443"/{s/(^<!--\s*\n|\n\s*-->)//g};p}'

Это игнорирует все строки без комментариев. Сохраняет строки комментариев в удерживающем пространстве, затем удаляет начальные / конечные разделители комментариев, если комментарий содержит <Connector port="8443", а затем печатает комментарий / не комментарий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...