Как использовать sed, awk или grep, чтобы удалить определенный шаблон, но сохранить все остальное

Как использовать sed, awk или grep, чтобы удалить определенный шаблон, но сохранить все остальное

Я хочу удалить все, кроме сообщения. Например, если у нас есть следующее:

<p class="TweetTextSize  js-tweet-text tweet-text" lang="en" data-aria-label-part="0">.<a href="/TuckerCarlson" class="twitter-atreply pretty-link js-nav" dir="ltr" data-mentioned-user-id="22703645" ><s>@</s><b>TuckerCarlson</b></a>: &quot;Massive demographic change has political consequences.&quot; <a href="/hashtag/Tucker?src=hash" data-query-source="hashtag_click" class="twitter-hashtag pretty-link js-nav" dir="ltr" ><s>#</s><b>Tucker</b></a><a href="https://t.co/PKqNgaihMQ" class="twitter-timeline-link u-hidden" data-pre-embedded="true" dir="ltr" >pic.twitter.com/PKqNgaihMQ</a></p>

Результат после использования команды должен выглядеть так:

Massive demographic change has political consequences.

Моя попытка на данный момент

sed -n "/<p class="TweetTextSize  js-tweet-text tweet-text" lang="en" data-aria-label-part="0">/,/<\/p>/p">>

Я пытаюсь удалить то, что находится внутри всех <> </>шаблонов между ними, <p> </p>и сохранить остальное. Я знаю, что это не кажется легким, но я все равно буду признателен за любую помощь.

решение1

Решение с использованиемxmstarletинструмент:

xmlstarlet sel -t -v "/p/text()[2]" -n file | sed 's/.*"\(.*\)"/\1/'

Выход:

Massive demographic change has political consequences.

selвариант

sel (или select) — выбор данных или запрос XML-документа(ов) (XPATH и т. д.)

-t--параметры шаблона

-vвариант

-v или --value-of — вывести значение выражения XPATH


/p/text()[2]- Выражение XPath, выбирает второй текстовый узел абзаца (первый текстовый узел — .)

sed 's/.*"\(.*\)"/\1/'- извлечь сообщение между двойными кавычками

Связанный контент