2016-11-26 3 views
-1

Я пытаюсь удалить узел из моего Свести файл XML, мой файл XML содержит следующее:удаление узла в XML-файл с СЭДОМ

... 
<cellule ref="1111"/> 
</blah> 
<workdocument id="bar" classement="1"/> 
<tablau id="35"> 
<cellule ref="1250"/> 
<area id="foo"> 
<subarea>Ipsum Lorem Dolor</subarea> 
<area> 
... 

Мне нужно удалить <workdocument id="bar" classement="1"/>, поэтому от элемента <workdocument до него закрывает "/>"

Я попытался следующие с СЕПГ:

echo '<cellule ref="1111"/></blah><workdocument id="bar" classement="1"/><tablau id="35"><cellule ref="1250"/><area id="foo"><subarea>Ipsum Lorem Dolor</subarea><area>' |sed 's/<workdocument.*\/>//' 
<cellule ref="1111"/></blah><area id="foo"><subarea>Ipsum Lorem Dolor</subarea><area> 

но <cellule ref="1250"/><area id="foo"> также удаляется:/

Пожалуйста, обратите внимание, что значение атрибута classement не известно:/

Спасибо

+3

Как правило, не рекомендуется обрабатывать XML (или другие структурированные данные) с помощью sed или аналогичных инструментов. Является ли ваш вход по-прежнему действительным XML? Возможно, вы захотите изучить инструменты обработки XML, такие как xmlstarlet. В этом случае: 'xmlstarlet ed -d // workdocument file.xml' – Wintermute

+0

привет и спасибо, да, он по-прежнему действителен, поэтому я пытаюсь использовать sed вместо этого, потому что я буду использовать его в сценарии bash, и я не уверен, что xmlstarlet установлен на всех машинах. – Zatla00

+2

Объедините это, это мое предложение. Или зависеть от чего-то вроде python, который вездесущ и имеет XML-обработку в стандартной библиотеке. Проблема с обработкой XML с помощью sed заключается в том, что внезапно недостаточно, чтобы ваш ввод был корректным XML, он должен быть XML, который отформатирован так, как может обрабатывать ваш скрипт. Например, если я поместил пару новых строк после ' Wintermute

ответ

2

Попробуйте это: sed 's/<workdocument[^\/]*\/>//'

Это использует [^/]* вместо .* после workdocument так, что его матч не превышают первые />. [^/] соответствует каждому персонажу, кроме /.

+0

Он отлично работает, спасибо, не могли бы вы дать некоторые объяснения используемого синтаксиса? – Zatla00

+0

Добавлено объяснение. Имеет ли это смысл? Я не очень хорошо разбираюсь в английском письме ... – kaitoy

+0

спасибо, это хорошо для меня сейчас! – Zatla00

Смежные вопросы