Wie durchsucht man HTML mit GNU grep 2.12 und bash 4.2.37?

Wie durchsucht man HTML mit GNU grep 2.12 und bash 4.2.37?

Ich habe grep noch nie zum Parsen von HTML-Dateien verwendet und habe folgendes Problem:

grep -Po "(?s)(<h2>.+?<!-- /endcontent -->)" input.html > output.html
-bash: !--: event not found

Ich habe auch versucht …

grep -Po "(?s)(<h2>.+?\<!-- \/endcontent --\>)" input.html > output.html

… umsonst.

Gibt es eine Möglichkeit, HTML-Dateien mit grep/bash zu analysieren, oder sollte ich eine andere Anwendung verwenden?

Danke schön.


Bearbeiten: Es sieht so aus, als gäbe es einen Trick zwischen der Shell und grep. Die Suche nach der genauen Zeichenfolge „test“ funktioniert, während weder „t.st“ noch „t.st“ funktionieren. Weiß jemand, warum?


Bearbeiten: Aus irgendeinem Grund ist es die Option „-P“, die den regulären Ausdruck unterbricht.


Bearbeiten: Ja, die Option „-P“ erfordert eine Verdoppelung des Punktzeichens, das für jedes beliebige Zeichen steht. Merkwürdig.

grep -Po 't..st' input > output

Antwort1

Versuchen Sie es stattdessen mit einfachen Anführungszeichen ', etwa so:

grep -Po '(?s)(<h2>.+?<!-- /endcontent -->)' input.html > output.html

Grep verhält sich anders, wenn Dinge in doppelte Anführungszeichen gesetzt sind.

verwandte Informationen