Ersetzten in Text-Dateien

moonwalker99

Lt. Commander
Registriert
Jan. 2008
Beiträge
1.976
Ich habe eine HTML-Datei, die mehrere
Code:
<script>
...
</script>
Abschnitte enthält. Diese gehen über mehrere Zeilen und sind unterschiedlich lang. Wie kann ich mit sed oder mit einem anderen Shell-Skript alle diese Abschnitte entfernen, ohne dass der Rest verloren geht? Das sieht kompliziert aus.
 
mensch183 schrieb:
Wenns perl sein darf:
perl -p0777e 's#<script>.*?</script>##gs' <input >output

Bie berüchtigte perl-Syntax...
Das Skript hat leider nichts erstezt. Und wenn ich statt script style reinschreibe, um den CSS-Kram zu entfernen, dann bricht er ab mit dieser Fehlermeldung:

Substitution loop at -e line 1, <> chunk 1.
 
Nichts ersetzt? Eventuell steht da z.B. <SCRIPT> statt <script>? Dann hinter das gs noch ein i schreiben, um Groß/Kleinschreibung zu ignorieren. Oder steht da nicht nur <script> sondern sowas wie <script src=xxx.js>? Das ist wieder was anderes.
Idealerweise postest du einen Ausschnitt aus dem fraglichen File. Raten ist unlustig.

Achso:
Es wird _nicht_ _im_ File ersetzt sondern ein neues File erzeugt. Wenn dein altes File bla.html heißt, sagst du:
perl -p0777e 's#<script>.*?</script>##gsi' <bla.html >blub.html
und bekommst ein neues File blub.html mit den Ersetzungen. bla.html bleibt unverändert.


Das "Substitution loop at -e line 1, <> chunk 1. " sieht nach einer Perl-internen Beschränkung aus. WIe groß ist das File?
 
Zuletzt bearbeitet:
mensch183 schrieb:
Das "Substitution loop at -e line 1, <> chunk 1. " sieht nach einer Perl-internen Beschränkung aus. WIe groß ist das File?

Sehr groß. Hab viele html-Dateien zu einer zusammengefasst, sind über 100 MB.
 
Mach erstmal mit <script> weiter. Da trat ja der Fehler nicht auf.

100 MB sind ok. Erst ab 1GB gibts u.U. Probleme.
 
Zuletzt bearbeitet:
mensch183 schrieb:
Mach erstmal mit <script> weiter. Da trat ja der Fehler nicht auf.

100 MB sind ok. Erst ab 1GB gibts u.U. Probleme.

Es klappt, allerding darf das erste <script> Tag nicht geschlossen werden, sondern es muss <script.* lauten.
 
Zuletzt bearbeitet:
Das wäre übrigens ein idealer Moment, sed aus der Mottenkiste zu holen. Warum Leute Perl als sed-Ersatz verwenden, ist mir ein Rätsel.
 
moonwalker99 schrieb:
Es klappt, allerding darf das erste <script> Tag nicht geschlossen werden, sondern es muss <script.* lauten.
Seltsam. Was für eine shell nutzt du? Sie scheint etwas innerhalb der single quotes zu interpretieren. Die üblichen Unix-Shells tun das nicht.

@Tuxman:
In Perl hab ichs im Kopf. Multiline-Verarbeitung in sed hingegen nicht. Da müßte ich erst nachschauen und ggf. testen.
 
Zurück
Oben