sed命令提取2个标签之间的所有行

时间:2018-10-23 19:38:11

标签: xml sed

我正在DOS上使用sed来提取2个标记之间的XML文件的内容。

除了一件小事之外,效果很好...
我不想显示正在搜索的标签的行。

这是我的工作:

sed -n "/<ITEMS/,/<\/ITEMS/p" 1.xml

我唯一关心的是它还会显示包含<ITEMS>的2行。

解决方案就在附近,但是我需要一些帮助!

1 个答案:

答案 0 :(得分:0)

您在这里:

echo "<foo>
<bar>
<item>
line 1
line 2
</item>" | sed -n '/<item/,/<\/item/ p'
<item>
line 1
line 2
</item>

您想要的是

echo "<foo>
<bar>
<item>
line 1
line 2
</item>" | sed -n '/<item/,/<\/item/ {//! p}'
line 1
line 2

这里有些棘手的地方是{//! p}-空的正则表达式// previous 正则表达式匹配。如果先前的正则表达式与不匹配不匹配,请打印该行。


一个用正则表达式无法解析XML的例子:嵌套标签:

echo "<foo>
<bar>
<item>
line 1
line 2
</item>
<item>
  line 3
  <item>
    line 4
  </item>
  line 5
</item>
" | sed -n '/<item/,/<\/item/ {//!p}'
line 1
line 2
  line 3
  <item>
    line 4