2013-05-05 123 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 
相关问题