Sed命令在第一个实例之前和之后删除

时间:2013-05-05 16:37:37

标签: xml text-manipulation

我正在寻找一个sed命令来清理我的一些kml文件。这些文件都在一行上,看起来像这样

<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>之后的所有文本,要么删除第一个{{1}之后提取内容的命令在最后<Placemark>之前。

到目前为止,我已经成功地完成了一项命令:

</Placemark>

已经删除了前879个字符,然后删除find . -name 'kmlFiles00*' -exec sed -r 's/^.{879}/ /' {} \; | sed -e 's/<\/Document><\/kml>//g' > placemarks_`date +%d-%m-%Y`.list 的所有实例,然后将它们全部输出到最终文件中,但这非常混乱,所以我正在寻找一个更清晰的命令。我也试过

</Document></kml>

我所知道的越来越近但仍然失败

2 个答案:

答案 0 :(得分:2)

awk NF=NF FPAT='<Placemark>.*</Placemark>'
  • 将字段定义为<Placemark>.*</Placemark>
  • 该行的
  • force rebuild,打印所有字段

答案 1 :(得分:0)

这可能适合你(GNU sed):

sed -r 's/<Placemark>/\n&/;s/.*\n(.*<\/Placemark>).*/\1/' file
相关问题