#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 лучше воспользоваться каким-нибудь более специализированным инструментом.
Комментариев нет:
Отправить комментарий