我想删除除消息之外的所有内容。例如,如果我们有以下内容:
<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>: "Massive demographic change has political consequences." <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/'
- 提取双引号之间的消息