So verwenden Sie sed, awk oder grep, um ein bestimmtes Muster zu löschen, aber alles andere beizubehalten

So verwenden Sie sed, awk oder grep, um ein bestimmtes Muster zu löschen, aber alles andere beizubehalten

Ich möchte alles außer einer Nachricht löschen. Wenn wir beispielsweise Folgendes haben:

<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>

Das Ergebnis nach Verwendung des Befehls sollte folgendermaßen aussehen:

Massive demographic change has political consequences.

Mein bisheriger Versuch

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

Ich versuche, den Inhalt aller <> </>Muster dazwischen zu löschen <p> </p>und den Rest zu behalten. Ich weiß, dass das nicht einfach erscheint, aber ich wäre trotzdem für jede Hilfe dankbar.

Antwort1

Die Lösung mitAbonnierenWerkzeug:

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

Die Ausgabe:

Massive demographic change has political consequences.

selMöglichkeit

sel (oder select) - Daten auswählen oder XML-Dokument(e) abfragen (XPATH usw.)

-t--template-Optionen

-vMöglichkeit

-v oder --value-of – Wert des XPATH-Ausdrucks drucken


/p/text()[2]- XPath-Ausdruck, wählt den zweiten Textknoten des Absatzes aus (der erste Textknoten ist .)

sed 's/.*"\(.*\)"/\1/'- um die Nachricht zwischen Anführungszeichen zu extrahieren

verwandte Informationen