GELÖST - span tag komplett entfernen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
medias
Beiträge: 65
Registriert: 18.05.2014 11:21:43

GELÖST - span tag komplett entfernen

Beitrag von medias » 20.04.2017 21:08:18

Ich versuche einen span tag komplett zu entfernen:

<span class="mhn">(1)</span>

Die (1) kann irgend eine Zahl sein.

sed -e 's/<span class="mhn".+?(?=span class="mhn">)span>//g' Datei > Datei2

war eine Idee. Leider wird nichts entfernt und sed läuft durch ohne mir eine Fehlermeldung auszugeben. Maskierung habe ich bereits versucht. Ebenfalls ein Versuch nur mit span ohne class.

sed -e 's/<span.+?(?=span>)span>//g'

Gleiches Ergebnis ohne Fehlermeldung. Hat jemand eine Idee?
Zuletzt geändert von medias am 22.04.2017 09:42:08, insgesamt 1-mal geändert.

Benutzeravatar
Gharika
Beiträge: 194
Registriert: 28.09.2004 16:51:51

Re: span tag komplett entfernen

Beitrag von Gharika » 21.04.2017 09:18:26

Hallo,

soll das zwischen den span Tags erhalten oder mit entfernt werden?

Alle HTML Tags entfernen:

Code: Alles auswählen

sed -e 's/<[^>]*>//g' Datei > Datei2
Inhalt zwischen span nicht entfernen, sondern nur span:

Code: Alles auswählen

sed -e 's/<span[^>]*>//g' Datei | sed 's/<\/span>//g' > Datei2
Beleidigungen sind die Argumente derer, die unrecht haben.

-- Jean Jacques Rousseau

Benutzeravatar
Meillo
Moderator
Beiträge: 4652
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: span tag komplett entfernen

Beitrag von Meillo » 21.04.2017 09:23:15

sed kann keine PCRE, das ist das Problem. ;-)

Entweder du verwendest Basic Regular Expressions oder du verwendest Perl & Co.
Use ed(1) once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 4652
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: span tag komplett entfernen

Beitrag von Meillo » 21.04.2017 09:25:15

Btw:
Gharika hat geschrieben:

Code: Alles auswählen

sed -e 's/<span[^>]*>//g' Datei | sed 's/<\/span>//g' > Datei2
Kann man auch kombinieren:

Code: Alles auswählen

sed 's/<span[^>]*>//g; s/<\/span>//g' Datei >Datei2
Use ed(1) once in a while!

medias
Beiträge: 65
Registriert: 18.05.2014 11:21:43

Re: span tag komplett entfernen

Beitrag von medias » 22.04.2017 09:40:45

Meillo hat geschrieben:sed kann keine PCRE, das ist das Problem. ;-)

Entweder du verwendest Basic Regular Expressions oder du verwendest Perl & Co.

Danke an alle für die Ideen. Dank der Hilfe eines Mitbewohners (ich wohne in einer WG 8O ) habe ich es mit Perl gelöst. Mit sed sah mir die Lösung doch sehr abenteuerlich aus und kaum nachvollziehbar. Mit Perl klappt es so:

Code: Alles auswählen

perl -0777 -pe 's/<span class\=\"mhn\".*?<\/span>//gs'
Auf diese Weise wird das span incl. seines Inhalts vollständig entfernt und es läuft rasend schnell durch die Datei. sed ist langsamer.

-0777 bedeutet lies die ganze Datei.

Benutzeravatar
Meillo
Moderator
Beiträge: 4652
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: span tag komplett entfernen

Beitrag von Meillo » 22.04.2017 14:31:33

medias hat geschrieben: Mit sed sah mir die Lösung doch sehr abenteuerlich aus und kaum nachvollziehbar. Mit Perl klappt es so:

Code: Alles auswählen

perl -0777 -pe 's/<span class\=\"mhn\".*?<\/span>//gs'
Man hat bei Perl der Vorteil mit dem Fragezeichen den Stern ungreedy zu machen, das geht mit POSIX-Regexps nicht, die sind immer greedy.

Btw: Ich vermute, dass man die ersten drei Backslashes weglassen kann. (Allerdings bin ich kein Perl-Programmierer.)
[...] es läuft rasend schnell durch die Datei. sed ist langsamer.
Lustig, dass das immer die gleiche erste Anmerkung von allen Perl-Programmierern ist: Es laeuft schneller als mit Shellmitteln. Dabei ist es fuer deinen Anwendungsfall sicher voellig egal, ob es zwei zehntel Sekunden laenger laeuft oder nicht. Die Zeit-Performance von Regexps liegt meist daran wie sie geschrieben sind (in Kenntnis der Regexp-Engine, die man verwendet). Je nachdem wie man die Regexp in sed schreibt ist sie schneller oder langsam ... in fast allen Faellen aber sind diese Unterschiede von der Laufzeit egal. Jedenfalls setze ich sed und awk taeglich und viel ein aber ich optimiere die Scripte nicht oefter als ein-, zweimal im Jahr.

-0777 bedeutet lies die ganze Datei.
Hae? Ist das wirklich so? Kann ich mir ja gar nicht vorstellen. Perl wird immer die ganze Datei lesen. 0777 hoert sich viel eher nach Zugriffsrechten an. Falls deine Bedeutung wirklich stimmen sollte, dann wuerde es mich doch sehr wundern.
Use ed(1) once in a while!

Benutzeravatar
heisenberg
Beiträge: 1105
Registriert: 04.06.2015 01:17:27

Re: GELÖST - span tag komplett entfernen

Beitrag von heisenberg » 22.04.2017 14:49:59

Laut man perlrun ist der Schalter -0###(Das ist die Null) die octale/hexadezimale Darstellung(###=oktal, 0x###=hex) des Eingebefeldtrenners aka $/. D. h. octal 777 müsste ein ungültiges Zeichen sein und der erste Datensatz ist die ganze Datei.

Das ist in dem Fall wichtig, da das Span-Tag über mehrere Zeilen erstrecken kann. Da wegen $/ normalerweise Zeile für Zeile verarbeitet wird, würde das dann nicht funktionieren.

Benutzeravatar
Meillo
Moderator
Beiträge: 4652
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: GELÖST - span tag komplett entfernen

Beitrag von Meillo » 23.04.2017 08:43:30

heisenberg hat geschrieben:Laut man perlrun ist der Schalter -0###(Das ist die Null) die octale/hexadezimale Darstellung(###=oktal, 0x###=hex) des Eingebefeldtrenners aka $/. D. h. octal 777 müsste ein ungültiges Zeichen sein und der erste Datensatz ist die ganze Datei.

Das ist in dem Fall wichtig, da das Span-Tag über mehrere Zeilen erstrecken kann. Da wegen $/ normalerweise Zeile für Zeile verarbeitet wird, würde das dann nicht funktionieren.
Aha. Danke.

Meine Folgefrage wird in der von dir erwaehnten Manpage auch beantwortet:
Any value 0400 or above will cause
Perl to slurp files whole, but by convention the value
0777 is the one normally used for this purpose.
Use ed(1) once in a while!

rendegast
Beiträge: 14293
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: GELÖST - span tag komplett entfernen

Beitrag von rendegast » 23.04.2017 09:12:54

Gäbe es dafür nicht auch ein mir passender erscheinendes html/xml-Tool?
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
Meillo
Moderator
Beiträge: 4652
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: GELÖST - span tag komplett entfernen

Beitrag von Meillo » 23.04.2017 09:30:52

rendegast hat geschrieben:Gäbe es dafür nicht auch ein mir passender erscheinendes html/xml-Tool?
Natuerlich kannst du auch eine XSL-Transformation machen, das waere wohl der passende Ansatz fuer dieses Problem. In der Praxis zeigt sich jedoch oft, dass sich solch einfache Aufgaben mit herkoemmlichen Mitteln einfacher (und bei grossen XML-Dateien auch sehr viel performanter) durchfuehren lassen. Ich habe den Eindruck, dass die XML-Welt in der Praxis nicht halten kann was sich in der Theorie so schoen anhoert.
Use ed(1) once in a while!

Antworten