我已经尝试了多种方法来解决这个问题,但我没有想法。希望有人能指出我做错了什么。
这是我的输入:
<Root>
<A>Keep</A>
<B>Keep</B>
<B>Remove</B>
<B>Keep</B>
<C>Keep</C>
</Root>
正如您现在可以弄清楚的那样,我只是想删除第 4 行:
<Root>
<A>Keep</A>
<B>Keep</B>
<B>Keep</B>
<C>Keep</C>
</Root>
这是我到目前为止所拥有的,但它并没有按预期工作:
sed -e '3,${g;s/<B>.*<\/B>//p}' t1
我尝试添加我发现的部分组逻辑,但它不起作用,因为 sed 似乎没有直接的方法使它变得贪婪。
有任何想法吗?
希望有人能指出我做错了什么
正确的方法是使用 XML/HTML 解析器,如xmlstarlet
或xmllint
:
xmlstarlet ed -O -d "//Root/*[3]" input.xml
ed
- 编辑模式-O
- 省略 XML 声明 (<?xml ...?>)
-d
- 删除操作"//Root/*[3]"
- xpath表达式选择父节点的第三个子节点Root
输出:
<Root>
<A>Keep</A>
<B>Keep</B>
<B>Keep</B>
<C>Keep</C>
</Root>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句