@bik

Как вырезать текст между двумя тэгами в xml?

Вечер добрый!

Ребят помогите пож. добиться удаления текста между тэгами description:
pastebin.com/bm31r1sh

Попытался сам таким макаром, но без результата:
sed 's#\(<description>\).*\(</description>\)#\1'xxxxx'\2#g' test.xml > test2.xml
sed '/<description>/,/<\/description>/{//!d}' test.xml > test2.xml


Файл сам по себе очень большой и xml утилиты вылетают при обработке.

Заранее спасибо!
  • Вопрос задан
  • 967 просмотров
Пригласить эксперта
Ответы на вопрос 3
@abcd0x00
Сначала готовишь текст, чтобы было поудобнее, потом обрабатываешь. Из-за этого два раз sed вызывается.
text="\
a
b
c
x1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<description>
  Туалетная вода-спрей
  &lt;br&gt;ВОСТОЧНЫЙ ФУЖЕР
  &lt;br&gt;Мужчина в стиле ориентирован на успех, целеустремлен и созидателен. Мужественность, достоинство, уверенность – его главные черты,    наряду с чувственностью и романтичностью. Он любит комфорт, красивые вещи,   роскошную жизнь и выражает себя в классическом пок$
 &lt;br&gt;Ключевые слова: Уверенный, динамичный, мужественный, благородный,  элегантный, статусный, успешный</description>y1yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
x2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<description>
  Туалетная вода-спрей
  &lt;br&gt;ВОСТОЧНЫЙ ФУЖЕР
  &lt;br&gt;Мужчина в стиле ориентирован на успех, целеустремлен и созидателен. Мужественность, достоинство, уверенность – его главные черты,    наряду с чувственностью и романтичностью. Он любит комфорт, красивые вещи,   роскошную жизнь и выражает себя в классическом пок$
 &lt;br&gt;Ключевые слова: Уверенный, динамичный, мужественный, благородный,  элегантный, статусный, успешный</description>y2yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
d
e
f
"

echo -n "$text"

echo -n "$text" | sed 's%<description>%&x|||%g; s%</description>%|||x&%g' \
                | sed '/x|||/ { :join N; /|||x/! b join ; s/x|||.*|||x// }'

Вывод
[guest@localhost ~]$ text="\
> a
> b
> c
> x1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<description>
>   Туалетная вода-спрей
>   &lt;br&gt;ВОСТОЧНЫЙ ФУЖЕР
>   &lt;br&gt;Мужчина в стиле ориентирован на успех, целеустремлен и созидателен. Мужественность, достоинство, уверенность – его главные черты,    наряду с чувственностью и романтичностью. Он любит комфорт, красивые вещи,   роскошную жизнь и выражает себя в классическом пок$
>  &lt;br&gt;Ключевые слова: Уверенный, динамичный, мужественный, благородный,  элегантный, статусный, успешный</description>y1yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
> x2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<description>
>   Туалетная вода-спрей
>   &lt;br&gt;ВОСТОЧНЫЙ ФУЖЕР
>   &lt;br&gt;Мужчина в стиле ориентирован на успех, целеустремлен и созидателен. Мужественность, достоинство, уверенность – его главные черты,    наряду с чувственностью и романтичностью. Он любит комфорт, красивые вещи,   роскошную жизнь и выражает себя в классическом пок$
>  &lt;br&gt;Ключевые слова: Уверенный, динамичный, мужественный, благородный,  элегантный, статусный, успешный</description>y2yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
> d
> e
> f
> "
[guest@localhost ~]$ 
[guest@localhost ~]$ echo -n "$text"
a
b
c
x1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<description>
  Туалетная вода-спрей
  &lt;br&gt;ВОСТОЧНЫЙ ФУЖЕР
  &lt;br&gt;Мужчина в стиле ориентирован на успех, целеустремлен и созидателен. Мужественность, достоинство, уверенность – его главные черты,    наряду с чувственностью и романтичностью. Он любит комфорт, красивые вещи,   роскошную жизнь и выражает себя в классическом пок$
 &lt;br&gt;Ключевые слова: Уверенный, динамичный, мужественный, благородный,  элегантный, статусный, успешный</description>y1yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
x2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<description>
  Туалетная вода-спрей
  &lt;br&gt;ВОСТОЧНЫЙ ФУЖЕР
  &lt;br&gt;Мужчина в стиле ориентирован на успех, целеустремлен и созидателен. Мужественность, достоинство, уверенность – его главные черты,    наряду с чувственностью и романтичностью. Он любит комфорт, красивые вещи,   роскошную жизнь и выражает себя в классическом пок$
 &lt;br&gt;Ключевые слова: Уверенный, динамичный, мужественный, благородный,  элегантный, статусный, успешный</description>y2yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
d
e
f
[guest@localhost ~]$ 
[guest@localhost ~]$ echo -n "$text" | sed 's%<description>%&x|||%g; s%</description>%|||x&%g' \
>                 | sed '/x|||/ { :join N; /|||x/! b join ; s/x|||.*|||x// }'
a
b
c
x1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<description></description>y1yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
x2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<description></description>y2yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
d
e
f
[guest@localhost ~]$

Ответ написан
Комментировать
@bik Автор вопроса
abcd0x00

Спасибо болшое. Если в консоле исполняю Ваш пример, все отрабатывается четко.
А вот на оригинальном файле слишком много удаляется:
gross-trading.com/feed.xml

Ориентируюсь по числинности стринга
cat feed.xml|grep '</offer>'|wc -l
Ответ написан
@pcdesign
Если я правильно понял вопрос, то на perl можно вот так:

use strict;
use warnings;
use utf8;

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

EOF

$text =~ s{<description>.*?</description>}{<description></description>}gsi;

print $text;


Результат:
<description></description>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы