メッセージを除いてすべて削除したいです。たとえば、次のような場合があります。
<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(または選択) - データ選択またはXML文書(XPATHなど)のクエリ
-t
--テンプレートオプション
-v
オプション
-v または --value-of - XPATH 式の値を出力します。
/p/text()[2]
- 段落の2番目のテキストノードを選択するXPath式(最初のテキストノードは.
)
sed 's/.*"\(.*\)"/\1/'
- 二重引用符間のメッセージの抽出