Ich habe ein paar hundert HTML-Quellcode-Dateien. Ich muss den Inhalt eines bestimmten <div>
Elements aus jeder dieser Dateien extrahieren, damit ich ein Skript schreiben kann, das die einzelnen Dateien durchläuft. Die Elementstruktur ist wie folgt:
<div id='the_div_id'>
<div id='some_other_div'>
<h3>Some content</h3>
</div>
</div>
Kann jemand eine Methode vorschlagen, mit der ich das div the_div_id
und alle untergeordneten Elemente und Inhalte aus einer Datei mit der Linux-Befehlszeile extrahieren kann ?
quelle
hxselect
ist wählerischer in Bezug auf das Eingabeformat alspup
. Zum Beispiel komme ichInput is not well-formed. (Maybe try normalize?)
mithxselect
dempup
Parsen klar.Versuchen Sie
pup
, ein Befehlszeilenprogramm zum Verarbeiten von HTML. Beispielsweise:quelle
Hier ist ein ungetestetes Perl-Skript, mit dem
<div id="the_div_id">
Elemente und deren Inhalte extrahiert werdenHTML::TreeBuilder
.Wenn Sie allergisch gegen Perl sind, hat Python
HTMLParser
.PS Versuchen Sie nicht, reguläre Ausdrücke zu verwenden. .
quelle
Hier ist ein Ex-Einzeiler, um diesen Teil aus jeder Datei zu extrahieren:
Zum Speichern / Ersetzen wechseln Sie
-cqa!
in-cxa
den%p
Abschnitt und entfernen ihn . Erwägen Sie aus Gründen der Rekursivität die Verwendung von globbing (**/*.html
).Grundsätzlich werden für jeden Puffer / jede Datei (
bufdo
) die folgenden Aktionen ausgeführt:/pattern
- Finde das Musternorm
- Starten Sie die Simulation normaler Vi-Tastenanschlägen
- zum nächsten Muster springen (im Ex-Modus erforderlich)vatd
- Entferne den ausgewählten äußeren Tag-Bereich (siehe: Springen zwischen HTML-Tags )ggdG
- den gesamten Puffer entfernen (entspricht:%d
)"2p
- zuvor gelöschten Text erneut einfügenVielleicht nicht sehr effizient und nicht POSIX (
:bufdo
), aber es sollte funktionieren.quelle