LINUX.ORG.RU

История изменений

Исправление Rainor, (текущая версия) :

Обработка XML регулярками приводит к очень больным последствия иногда.

По сабжу, файл Ваш скачать непредставляется возможным, отсюда предполагаю, что все теги description могут оказаться в одной строке. Особенность sed - greedy matching, т.е. lazy-регулярки задать невозможно. Для нас это важно тем, что при нескольких </description> в строке итоговый matching будет до последнего соответствия. Т.е. удалится не содержимое в нескольких <description> а весь текст от первого <description> до последнего </description>.

Как это обойти в базовом случае верно указал xaizek - нужно определить некий «пограничный символ», которого точно не будет в удаляемом тексте. Но в XML может быть всё что угодно и такая регулярка будет работать до первого авось, к сожалению.

При наличии perl - надежнее решить на нём:

perl -pe 's|<(description)>.*?</\1>||'

P.S. Ссылка shell-script'а от этого актуальной быть не перестаёт.

Исходная версия Deleted, :

Обработка XML регулярками приводит к очень больным последствия иногда.

По сабжу, файл Ваш скачать непредставляется возможным, отсюда предполагаю, что все теги description могут оказаться в одной строке. Особенность sed - greedy matching, т.е. lazy-регулярки задать невозможно. Для нас это важно тем, что при нескольких </description> в строке итоговый matching будет до последнего соответствия. Т.е. удалится не содержимое в нескольких <description> а весь текст от первого <description> до последнего </description>.

Как это обойти в базовом случае верно указал xaizek - нужно определить некий «пограничный символ», которого точно не будет в удаляемом тексте. Но в XML может быть всё что угодно и такая регулярка будет работать до первого авось, к сожалению.

При наличии perl - надежнее решить на нём:

<code>perl -pe 's|<(description)>.*?</\1>||'</code>

P.S. Ссылка shell-script'а от этого актуальной быть не перестаёт.