使用sed修改tomcat server.xml配置

时间:2011-10-29 06:50:35

标签: regex linux bash tomcat sed

我正在制作一个依赖于Tomcat7到HTTPS的Ubuntu软件包。为了方便我们的客户,我希望软件包的安装脚本在Tomcat7中启用HTTPS。这很容易手动完成;在文件/etc/tomcat7/server.xml中,需要取消注释以下块:

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

我怎么能从一个shellcript做到这一点?优选地,它仍然适用于精确图案的轻微修改。我认为该规则与search for '<Connector port="8443"'一致,然后在阻止之前和之后删除<!---->

3 个答案:

答案 0 :(得分:7)

考虑在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 :(得分:1)

差异很可能是您选择的工具。但是如果经常更改原始配置文件,则diff将来无法在将来的版本中应用您的脚本。

sed还具有读取多行的能力。您可能希望查看同时处理修改xml文档的this example

答案 2 :(得分:0)

这可能有效:

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

忽略所有非评论行。将注释行保存在保留空间中,如果注释包含<Connector port="8443",则删除开始/结束注释分隔符,然后打印注释/非注释。