在带有树线的行之间删除 sed



我有几个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的行之间删除,因为我有"标识符">

最新更新