Удалить содержимое из узла XML с помощью sed - PullRequest
0 голосов
/ 21 мая 2018

Мой входной XML-файл выглядит следующим образом:

...
  <logos>
    <logo name="" primary="true" guid="c6aae8fe-bb04-4067-9b14-18b1bcf940d3" />
    <logo name="" primary="false" guid="68b55f4d-f401-4180-b0e0-160974758348" />

  </logos>
...

Мне нужно удалить содержимое , сохраняя узел .Ожидаемый результат:

<logos></logos>

Моя команда выглядит следующим образом:

sed -i 's|\(<logos>\)\(.+\)\(</logos>\)|\1\3|gi' $filename

Но она не работает.Чего мне не хватает?

Редактировать : это не дубликат удаления узла в XML-файле с помощью sed : этот вопрос касается удаления целогоузел .Здесь мне нужно удалить содержимое только узла .

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

sed и т.п. будет плохим выбором для таких случаев.
Используйте правильные парсеры XML / HTML.

xmlstarlet решение:

Образец input.xml:

<root>
<logos>
    <logo name="" primary="true" guid="c6aae8fe-bb04-4067-9b14-18b1bcf940d3"/>
    <logo name="" primary="false" guid="68b55f4d-f401-4180-b0e0-160974758348"/>
  </logos>
</root>

xmlstarlet ed -O -d '//logos/*' input.xml

Выход:

<root>
  <logos/>
</root>
0 голосов
/ 21 мая 2018

Вы можете использовать диапазоны адресов в дополнение к команде c:

sed -i.bak '/<logos>/,/<\/logos>/c<logos></logos>' $filename
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...