我有几个tomcat服务器,我想通过一些bash脚本动态管理上下文.xml文件,我想使用sed
删除资源。我知道怎么做,但为了可读性,我想该文件在多个服务器上的格式如下所示,我想我无法仅以此识别要删除的资源:
sed '/PATTERN-1/,/PATTERN-2/d' context.xml
但是在模式 1 上,我需要让第二行将 name 属性的一部分替换为 bash 脚本变量。我尝试了几种转义\s或的方法
<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>
如果我正确理解了您的问题,您可以尝试以下方法:
sed -ri '/<Resource/,//>/ {/name=.*$/d}' filename
使用 -r 允许解释正则表达式,使用 -i 直接修改文件,您将首先隔离 和/> 之间的数据,然后删除以 name= 开头的行">
我最终这样做了
cat context.xml | sed ':a;N;$!ba;s/<Resourcen/<Resource /g;s/ +/ /gp' | sed -i '/<Resource name="jdbc/$2"/,//>/d'
第一个sed
转弯
<Resource
name="jdbc/example"
...
/>
到
<Resource name="jdbc/example"
...
/>
有了它,我可以在带有第二个sed
的行之间删除,因为我有"标识符">