2013-05-05 2 views
0

Я ищу команду sed, чтобы очистить некоторые файлы kml, которые у меня есть. Файлы находятся на одной линии и посмотреть, как этотКоманда Sed delete перед первым экземпляром и после последнего

<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 
Смежные вопросы