使用sed根据第三内部模式删除两个匹配之间的行

时间:2016-11-29 17:59:08

标签: regex xml text replace sed

假设:

<tagA/>
<tagB>...</tagB>
<setOfFoo>
  <foo>...</foo>
  <foo>
    ...some special content...
  </foo>
  <foo>...</foo>
  <foo>...</foo>
</setOfFoo>
<tagN/>

我想删除foo的整个节点,只要有一些特定的内容,我尝试的是:

sed '/<foo>/,/special content/d;/special content/,/<\/foo>/d'
# or
sed '/<foo>/,/<\/foo>/{1,/special content/d;/special content/,$d}'
# or
sed '/<foo>/,/<\/foo>/{:a;N;ba;/special content/d}'

但这些都没有,有什么想法吗?

请记住:不应删除其他foo标记。

1 个答案:

答案 0 :(得分:0)

当我尝试更多时,我找到了解决方案:

sed '/<foo>/,/special content/N;/special content/,/<\/foo>/d'

我仍然发布了帮助社区的问题。