我正在寻找一个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>
我所知道的越来越近但仍然失败
答案 0 :(得分:2)
awk NF=NF FPAT='<Placemark>.*</Placemark>'
<Placemark>.*</Placemark>
答案 1 :(得分:0)
这可能适合你(GNU sed):
sed -r 's/<Placemark>/\n&/;s/.*\n(.*<\/Placemark>).*/\1/' file