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式は、段落の2番目のテキストノードを選択します(最初のテキストノードは.

sed 's/.*"\(.*\)"/\1/'- 二重引用符で囲まれたメッセージを抽出します

関連情報