2014-02-12 51 views
1

我正在嘗試使用sed清理XML文件。使用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> 

爲了讓事情變得更加混亂,源文件是在所有單線。

謝謝。

回答

2

如果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 

這兩者都不是貪婪的,所以它不會破壞多次出現0123的行區塊,反對使用貪婪.*