Страницы

Поиск по вопросам

воскресенье, 12 января 2020 г.

Как удалить многострочный текст между тэгами?

#linux #регулярные_выражения #perl #sed


Как убрать весь многострочный текст между тэгами описания?

  
  Туалетная вода-спрей 
  <br>ВОСТОЧНЫЙ ФУЖЕР
  <br>Мужчина в стиле ориентирован на успех, целеустремлен и созидателен. Мужественность,
достоинство, уверенность – его главные черты,    наряду с чувственностью и романтичностью.
Он любит комфорт, красивые вещи,   роскошную жизнь и выражает себя в классическом пок$
 <br>Ключевые слова: Уверенный, динамичный, мужественный, благородный,  элегантный,
статусный, успешный



Вот этот вариант удаляет только те, которые в одной строке:

sed 's#\(\).*\(\)#\1'xxxxx'\2#g' test.xml > test2.xml


Александр Баракин предложил вот такой вариант:

$ sed '//,/<\/description>/{//!d}' test.xml > test2.xml


но текст не удаляется между тэгами в таком примере:
Пример
    


Ответы

Ответ 1



для данного конкретного случая, например, так: $ sed '//,/<\/description>/{//!d}' test.xml > test2.xml но лучше, действительно, воспользоваться более подходящим инструментом для работы с xml. если вдруг и строки-ограничители требуется убрать, то {//!d} надо заменить просто на d: $ sed '//,/<\/description>/d' test.xml > test2.xml дополнение для удаления текста (в той же строке) и после начального тега, и перед конечным, программу для sed, естественно, придётся значительно удлинить: $ sed '//,/<\/description>/{//!d;s/\(\).*/\1/;s/.*\(<\/description>\)/\1/}' test.xml > test2.xml поэтому ещё раз напомню, что для обработки xml лучше воспользоваться каким-нибудь более специализированным инструментом.

Комментариев нет:

Отправить комментарий