Alle Tags aus einer Textdatei löschen

Du hast Probleme mit Deinem eMail-Programm, Webbrowser oder Textprogramm? Dein Lieblingsprogramm streikt?
Antworten
Richard
Beiträge: 639
Registriert: 11.10.2012 14:18:37
Lizenz eigener Beiträge: GNU General Public License

Alle Tags aus einer Textdatei löschen

Beitrag von Richard » 22.06.2018 18:41:01

Hallo,

hab hier eine Textdatei - konkret: eine automatisch von YouTube erstelle Untertitel-Datei im Format WebVTT - die absolut unsinnige Farbcodierungen enthält, die kein Player oder Subtitle-Tool das ich kenne verarbeiten kann. Die werden halt normal als Text dargestellt. Bisher hab ich die immer im Editor Kate per Suche&Ersetzen über reguläre Ausdrücke gelöscht, also durch "nichts" ersetzt. Ein Tag sieht z. B. so aus

Code: Alles auswählen

<c.colorE5E5E5>
Der angegebene Farbcode kann abweichen, weswegen ich ja Regex nutzen musste. Sind auch ein paar immer gleiche Tags drin wie "</c> die gehen auch ohne Regex zu löschen. Der Regex für den Tag war

Code: Alles auswählen

<c.color[A-Z0-9]*>
Ich würde das lieber über ein Script machen. Gibt es da etwas wo ich die Inputdatei angeben, was gelöscht werden soll und dann sie Ausgabedatei?

Richard

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: Alle Tags aus einer Textdatei löschen

Beitrag von eggy » 22.06.2018 19:32:38

Ich würd sagen, ein Fall für awk (andere würden Dir evtl auch sed empfehlen).

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

Re: Alle Tags aus einer Textdatei löschen

Beitrag von Meillo » 22.06.2018 21:07:49

Sed kann gut suchen und ersetzen. Im allgemeinsten Fall beispielsweise so:

Code: Alles auswählen

sed 's/<[^>]*>//g' in >out
Ganz einfach. :-)
Use ed once in a while!

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: Alle Tags aus einer Textdatei löschen

Beitrag von eggy » 22.06.2018 21:45:33

offtopic: genau der da --^ war mit "andere" gemeint :mrgreen:

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

Re: Alle Tags aus einer Textdatei löschen

Beitrag von Meillo » 22.06.2018 22:53:16

Awk mag ich ja lieber als sed, aber je nach Problem ist das eine oder das andere (oder auch eine Kombination) besser geeignet. Simples Ersetzen geht in sed einfacher, solange man keine EREs braucht (oder vor `sed -r' nicht zurueckschreckt). Zeilenuebergreifend zu arbeiten ist dagegen in awk sehr viel einfacher. Es kommt also immer auf das konkrete Problem an, was ich waehlen wuerde, auch wenn die meisten dieser Problemchen mit beiden Sprachen gut loesbar sind.

Der Vollstaendigkeit halber also auch noch in awk:

Code: Alles auswählen

awk '{ gsub(/<[^>]+>/, ""); } 1' in >out
(Die `1' ist ein Shortcut fuer ein `print;' am Ende des Blocks.)

Der Code hier ist etwas korrekter als die sed-Variante, weil mindestens ein Zeichen zwischen den spitzen Klammern erwartet wird. Sed unterstuetzt aber (nach POSIX) nur BREs, welche kein `+' haben, sondern nur `*'. Man kann damit zwar das Gleiche ausdruecken, muss dafuer aber den Teilausdruck wiederholen. Also: <[^>]+> ist aequvaent zu: <[^>][^>]*> . Die zusaetzliche Schreibarbeit spare ich mir meist in sed, weil fast immer auch der etwas ungenaue Ausdruck funktioniert.


Und nachdem du das nun gelernt hast, @eggy, erklaerst du es bei der naechsten Frage zu so einem Thema. ;-)
Use ed once in a while!

Benutzeravatar
Livingston
Beiträge: 1427
Registriert: 04.02.2007 22:52:25
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: 127.0.0.1

Re: Alle Tags aus einer Textdatei löschen

Beitrag von Livingston » 26.06.2018 14:31:11

Etwas OT, aber es könnte sich lohnen: http://www.grymoire.com/Unix/sed.html
Wenn man Zeit übrig hat und ein wenig experimentieren will, lohnt sich dieser Klassiker auf alle Fälle. Auch die Beispiele zu den anderen UNIX-Tools sind großartig.

Antworten