Auch wenn das richtige Tool mal nicht zur Hand ist, erlaubt es der Linux-Werkzeugkasten oft, sich schnell einen Workaround zu basteln, der bis ins Ziel trägt.
Gesetzt den Fall, der Admin hat ein Open-(oder Libre-)Office-Writer-Dokument vor sich. Er will es lesen, hat aber gerade kein Office zur Hand. Vielleicht spielt sich das Ganze auch auf einem Einplatinenrechner ab, auf dem er keine große Office-Suite installieren will. Was tun? Er kann sich helfen und den Text trotzdem recht komfortabel lesbar machen, muss dazu aber ein paar Kleinigkeiten beachten.
Zuerst ist wichtig zu wissen, dass das Office-Dokument ein Zip-Archiv ist. Er muss es also im ersten Schritt entpacken:
jcb@hercules$ unzip Test.odt Archive: Test.odt extracting: mimetype extracting: Thumbnails/thumbnail.png ... inflating: content.xml ... inflating: META-INF/manifest.xml
Von den vielen Files, die so entstehen, interessiert hier nur »content.xml«, in dem sich der Inhalt findet. Auf Anhieb lesbar ist der aber nicht, weil die Textzeilen in XML-Tags untergehen (Abbildung 1).
Diesen Wust an Tags blendet nun aber der folgende Perl-Einzeiler mit einem Schlag aus (Listing 1). Was passiert hier? Perl benutzt in diesem Einzeiler nacheinander drei reguläre Ausdrücke. Der erste passt auf Konstrukte, die mit einer geöffneten spitzen Klammer beginnen, irgendwelche Zeichen außer einer schließenden spitzen Klammer enthalten und mit »>« enden. Solche Ausdrücke werden durch ein Leerzeichen ersetzt. Damit sind auf einen Schlag alle XML-Tags weg.
Listing 1
Der magische Einzeiler
01 jcb@hercules>cat content.xml | perl -p -e "s/<[^>]*>/ /g;s/\n/ /g;s/ +/ /;" 02 Das ist ein Libre-Office-Writer-Dokument. Es enthält ein paar Zeilen Text - nur zur Illustration, der Inhalt ist nicht wichtig.
Der zweite reguläre Ausdruck ersetzt alle Zeilenschaltungen durch Leerzeichen und der dritte kürzt zum Abschluss mehrfache Leerzeichen, die durch die vorherigen Tauschaktionen entstanden sein mögen, auf ein einziges Leerzeichen zusammen.
Übrig bleibt nur der blanke, jetzt auch sehr gut lesbare Text, den das Terminal je nach Breite des Fensters am Zeilenende umbricht.






