用树线在行之间删除sed

时间:2017-07-03 18:43:55

标签: bash tomcat sed

我有几个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>

2 个答案:

答案 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的行,因为我有“标识符”