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

Xml Sed命令在第一个实例之前和最后一个实例之后删除,xml,text-manipulation,Xml,Text Manipulation,我正在寻找一个sed命令来清理一些kml文件。这些文件都在一行上,看起来像这样 <some text><kml><Document><name> Name </name><Placemark><name> Hotel 01 </name></Placemark><Placemark><name> Hotel 02 </name></Placemar

我正在寻找一个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>
Name酒店01酒店02酒店03
理想情况下,我只需要从第一个
元素开始(包括第一个
元素)到最后一个
元素的部分,以及从所有kml文件输出到单个文件的这些部分

我很乐意使用命令来删除第一个
之前的所有文本和删除最后一个
之后的所有文本,或者使用命令来提取第一个
之后和最后一个
之前的内容

到目前为止,我已经设法将一个命令组合在一起:

find . -name 'kmlFiles00*' -exec sed -r 's/^.{879}/ /' {} \; | sed -e 's/<\/Document><\/kml>//g' > placemarks_`date +%d-%m-%Y`.list
find-名称'kmlFiles00*'-exec sed-r's/^.{879}/'{}\|sed-e的///g'>位置标记`日期+%d-%m-%Y`.列表
它在去除前879个字符,然后在将其全部输出到最终文件之前删除
的所有实例方面起了作用,但这相当混乱,因此我正在寻找一个更干净的命令。我也试过了

sed -e 's/^.*<Placemark> //' -e 's/<\/Placemark>.*$//' 
sed-e's/^.*/'-e's/*$/'
我知道它越来越近了,但仍然失败了

awk NF=NF FPAT='.'
  • 将字段定义为
    *
  • 打印所有字段
这可能适合您(GNU-sed):

sed-r的/\n&/;s/*\n(.*./\1/'文件
sed -r 's/<Placemark>/\n&/;s/.*\n(.*<\/Placemark>).*/\1/' file