0

我正在寻找一个 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>的命令,或者一个提取第一个之后<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>.*$//' 

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

4

2 回答 2

2
awk NF=NF FPAT='<Placemark>.*</Placemark>'
  • 将字段定义为<Placemark>.*</Placemark>
  • 强制重建线路,打印所有字段
于 2013-05-05T17:05:40.767 回答
0

这可能对您有用(GNU sed):

sed -r 's/<Placemark>/\n&/;s/.*\n(.*<\/Placemark>).*/\1/' file
于 2013-05-05T23:28:55.333 回答