我有几个tomcat服务器,我想通过一些bash脚本动态管理context.xml文件,我想使用sed
删除资源。我知道它是怎么做的,但为了便于阅读,文件的格式如下所示跨多个服务器我想,我无法识别要删除的资源:
sed '/PATTERN-1/,/PATTERN-2/d' context.xml
但是在模式1上我需要获取第二行来替换name属性的一部分作为bash脚本变量。我尝试了几种方法来逃避\ s或\ n
<Context>
...
<Resource
name="jdbc/EmployeeDB" auth="Container"
type="javax.sql.DataSource"
description="Employees Database for HR Applications"
/>
<Resource
name="jdbc/SportDB" auth="Container"
type="javax.sql.DataSource"
description="Sport Database for HR Applications"
/>
<Resource
name="jdbc/BackupDB" auth="Container"
type="javax.sql.DataSource"
description="Backup Database for HR Applications"
/>
...
</Context>
答案 0 :(得分:0)
如果我正确理解您的问题,您可以尝试以下方法:
sed -ri '/<Resource/,/\/>/ {/name=.*$/d}' filename
使用-r允许解释正则表达式并使用-i直接修改文件,首先要在/和/之间隔离数据。然后删除以name =&#34;
开头的行答案 1 :(得分:0)
我最终这样做了
cat context.xml | sed ':a;N;$!ba;s/<Resource\n/<Resource\ /g;s/ \+/ /gp' | sed -i '/<Resource\ name=\"jdbc\/$2\"/,/\/>/d'
第一个sed
转弯
<Resource
name="jdbc/example"
...
/>
到
<Resource name="jdbc/example"
...
/>
我可以删除第二个sed
的行,因为我有“标识符”