使用 sed 从 XML 文件中删除节点和数据 [英] Using sed to delete node and data from XML file

查看:53
本文介绍了使用 sed 从 XML 文件中删除节点和数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 sed 清理 XML 文件.

I am trying to clean up an XML file using sed.

我需要删除所有123.123.

I need to remove all <DistanceMeters>123.123</DistanceMeters>.

我一直在尝试使用这个命令,但没有成功:

I've been trying to use this command, without success:

sed 's/(<DistanceMeters>)[.]*?(<\/DistanceMeters>)/ /g' file.txc

示例节点:

<Trackpoint><Time>2014-02-12T18:18:49+11:00</Time>
<Position><LatitudeDegrees>35.209656</LatitudeDegrees><LongitudeDegrees>28.99924</LongitudeDegrees></Position>
<AltitudeMeters>586.99994</AltitudeMeters>
<DistanceMeters>148.30713</DistanceMeters>
<Cadence>4</Cadence>
<Extensions><TPX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2" CadenceSensor="Bike"><Speed>0.043145742</Speed></TPX></Extensions></Trackpoint>

为了让事情更混乱一些,源文件都在一行中.

To make things a little more confusing, the source file is all on a single line.

谢谢.

推荐答案

如果 DistanceMeters 在单独的行中,只需执行:

If DistanceMeters is in a separated line, just do:

awk '!/DistanceMeters/' file
<Trackpoint><Time>2014-02-12T18:18:49+11:00</Time>
<Position><LatitudeDegrees>35.209656</LatitudeDegrees><LongitudeDegrees>28.99924</LongitudeDegrees></Position>
<AltitudeMeters>586.99994</AltitudeMeters>
<Cadence>4</Cadence>
<Extensions><TPX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2" CadenceSensor="Bike"><Speed>0.043145742</Speed></TPX></Extensions></Trackpoint>

要将其从文本块内删除,您可以执行以下操作:

To remove it from inside a text block, you can do:

awk '{sub(/<DistanceMeters>[^>]*>/,x)}8' file

或者使用sed:

sed 's/<DistanceMeters>[^>]*>//g' file

这两者都不是贪婪的,因此它不会破坏多次出现 块的行,而不是使用贪婪的 .*

Both this is none greedy, so it will not destroy lines with multiple occurrence of <DistanceMeters> blocks, as oppose to use the greedy .*

这篇关于使用 sed 从 XML 文件中删除节点和数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆