使用sed从XML文件中删除节点和数据

时间:2014-02-12 11:35:12

标签: xml regex sed

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

我需要删除所有<DistanceMeters>123.123</DistanceMeters>

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

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>

为了让事情更加混乱,源文件全部在一行上。

感谢。

1 个答案:

答案 0 :(得分:3)

如果DistanceMeters位于单独的行中,请执行以下操作:

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>

要从文本块中删除它,您可以执行以下操作:

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

sed

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

这两个都不贪心,所以它不会破坏多次出现<DistanceMeters>块的行,反对使用贪婪的.*