我正在制作一个依赖于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"'
一致,然后在阻止之前和之后删除<!--
和-->
。
答案 0 :(得分:7)
考虑在server.xml
上应用补丁。
生成补丁文件:
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" />
- --->
(...)
然后,只需应用补丁:
patch server.xml mydiff.patch
您可以使用标记patch
运行-N
命令。因此,它将跳过似乎已修补的文件。
答案 1 :(得分:1)
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"
,则删除开始/结束注释分隔符,然后打印注释/非注释。