如何使用 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

解決方案使用小星工具:

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/'- 提取雙引號之間的訊息

相關內容