2013-05-05 102 views
0

我正在尋找一個sed命令來清理我所擁有的一些kml文件。這些文件都在同一行,看起來像這樣在第一個實例之前和之後刪除Sed命令

<some text><kml><Document><name> Name </name><Placemark><name> Hotel 01 </name></Placemark><Placemark><name> Hotel 02 </name></Placemark><Placemark><name> Hotel 03 </name></Placemark></Document></kml> 

理想我唯一想要的部分開始(包括)第一<Placemark>元素到最後(含)</Placemark>元素,並從所有這些部分kml文件輸出到單個文件。

我很高興在第一<Placemark>之前可以刪除所有文字和最後</Placemark>後刪除所有文字,或命令的第一<Placemark>後,最後</Placemark>之前的內容中提取的命令。

,我已經成功地一起迄今爲止彆彆扭扭的命令是:

find . -name 'kmlFiles00*' -exec sed -r 's/^.{879}/ /' {} \; | sed -e 's/<\/Document><\/kml>//g' > placemarks_`date +%d-%m-%Y`.list 

這在擺脫第879個字符的已經工作,然後將其輸出到所有決賽前去除</Document></kml>所有實例文件,但這是相當混亂,所以我正在尋找一個更乾淨的命令。我也曾嘗試

sed -e 's/^.*<Placemark> //' -e 's/<\/Placemark>.*$//' 

我知道越來越近,但仍然無法

回答

2
awk NF=NF FPAT='<Placemark>.*</Placemark>' 
  • 定義一個字段作爲<Placemark>.*</Placemark>
  • force rebuild,打印所有領域
0

這可能適合你(GNU sed):

sed -r 's/<Placemark>/\n&/;s/.*\n(.*<\/Placemark>).*/\1/' file 
相關問題