Entfernen Sie alle HTML-tags aus einer Webseite
Ich bin dabei einige BASH-shell-scripting mit curl
. Wenn mein curl Befehl gibt text, ich weiß ich habe einen Fehler. Dieser text zurückgegeben curl
ist in der Regel in HTML. Ich dachte mir, dass wenn ich Streifen aus alle HTML-tags, konnte ich die Anzeige der resultierende text als Fehlermeldung.
Ich dachte an so etwas wie dieses:
sed -E 's/<.*?>//g' <<<$output_text
Aber ich bekomme sed: 1: "s/<.*?>//": RE error: repetition-operator operand invalid
Wenn ich ersetzen *?
mit *
ich nicht den Fehler (und ich bekomme keine text). Wenn ich entfernen Sie die globalen (g
) Flagge, bekomme ich den gleichen Fehler.
Dies ist auf Mac OS X.
- HTML kann nicht geparst werden, die mit regulären Ausdrücken. ein einfaches Beispiel:
<img alt="<this is an image>" src="...">
- Für eine Sekunde dachte ich Sie könnte die Verknüpfung zu einem meiner vielen Beiträge, wo ich an diesem Punkt. Die
sed
ist eigentlich nur ein macguffin. Ich wollte nicht, dass meine Frage geschlossen, weil ich zeigen nicht mein code. Was ich wirklich gehofft, jemand sagt "Hey, idiot, wenn du bist so ein Unix-Experte, warum nicht einfach mit *foo*? Das ist es, was *foo* ist wohl um zu verwendet werden. Es ist auf allen Unix - /Linux-Betriebssystemen." Ich würde es in Perl, aber Perl sind keine HTML-parsing-Module, und ich kann nicht installieren Sie Sie in dieser situation. Zu viele Systeme und ich glaube auch nicht kontrollieren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
sed nicht unterstützt nicht gierig.
versuchen
sed
(entweder-E
oder-r
das wird sich auf erweiterte reguläre Ausdrücke, und diesed
manpage Zusammenhang mit derre_format
manpage, die Sprach über non-greedy-Qualifikanten. Ich kann nur noch wechseln, um die alte standby-Modus.Apache Tomcat/7.0.27 - Error report HTTP Status 404 - type Status reportmessage description The requested resource () is not available.Apache Tomcat/7.0.27
. Das ist ziemlich viel, was ich wollte. Streifen aus der<head>
und alle anderen tags, so kann ich sehen, dass404
Fehlermeldung ein bisschen mehr sauber.Vielleicht parser-perl-basierten Lösung?
Müssen Sie installieren Sie die HTML::Streifen Modul mit
cpan HTML::Strip
Befehl.alternativ
können Sie ein standard-OS X-Dienstprogramm aufgerufen:
textutil
siehe die man-Seiteproduzieren
file.txt
mit offenem html-tags, oderEine weitere alternative
Einige Systeme installiert, die
lynx
nur-text-browser. Sie können benutzen Sie:Aber in deinem Fall, verlassen Sie sich nur auf Reine
sed
oderawk
Lösungen... IMHO.Aber, wenn Sie perl - (und nur noch nicht die HTML::Streifen-Modul) das nächste ist immer noch besser als
sed
da wird Sie den nächsten (multiline und gemeinsamen) tag auch:
textutil
und es funktioniert Super. Leider unsere Server sind Linux. :-(. Ich habe mit Unix seit fast drei Jahrzehnten (Naja, nicht wirklich wahr, das erste Unix-wie Systeme, die ich arbeitete, waren Xenix), und ich konnte nicht denken, der eine einzige tool, das dies tun könnte. Ich magtextutil
, und es ist in fast allen Unix-Plattformen, aber nie gemacht es auf Linux.OS X
fügte der OS X Lösung. 🙂 Auf Linux (oder freebsd) es ist viel schwieriger, weil Sie nicht Vorhersagen können, welche tools installiert ist. Aber, hinzufügen, eine Linux-Lösung auch.. 🙂Code für GNU sed:
Könnte dies scheitern, sollten Sie besser ein html-Analyse tool.
Wenn Sie möchten, entfernen Sie alle HTML-tags und auch alle script-tags (und deren Inhalt), können Sie die folgenden verwenden: