
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>: "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>
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.
sel
Möglichkeit
sel (oder select) - Daten auswählen oder XML-Dokument(e) abfragen (XPATH usw.)
-t
--template-Optionen
-v
Mö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