Schlagwort-Archive: filterprogramme

1.103.2 Texte mittels Filterprogrammen bearbeiten

lupus

Quelle für 1.103 Bild

Aus dem Kapitel 1.103 GNU und Unix Kommandos
Prüfungskandidaten sollten in der Lage sein, Filter auf Textströme anzuwenden. Dieses Lernziel beinhaltet das Senden von Textdateien und -ausgaben durch Textfilterprogramme, um die Ausgabe zu modifizieren, und die Verwendung von Standard-Unix-Kommandos, die im GNU textutils Paket enthalten sind.

Die wichtigsten Dateien, Bezeichnungen und Anwendungen:

* cat, cut, expand, ,fmt, head, join, nl, od, paste, pr, sed, sort, split, tac, tail, tr, unexpand, uniq, wc

Textfilter

Unter Unix werden sehr viele kleine Programme angeboten, die als Filter für Textdateien zur Anwendung kommen und die in der Regel nur eine kleine Aufgabe beherrschen. Durch die Kombination mehrerer solcher Programme mit Pipes und Umleitungen (siehe Abschnitt 1.103.4 – Benutzen von Unix Streams, Pipes und Umleitungen) können dadurch vielfältige Aufgaben gelöst werden. Die in dieser Zielsetzung genannten Textfilter sollten Sie beherrschen. Hier nochmal zu diesen Filtern ein paar Kurzbeschreibungen. Grundsätzlich ist das Studium der jeweiligen Handbuchseiten hier sehr empfehlenswert…

sed

sed ist ein Stream-Editor, ein Editor, der Datenströme oder Dateien nach bestimmten Regeln bearbeitet. sed ist ein sehr komplexes Programm, von dem in der LPI-101-Prüfung nur sehr geringe Kenntnisse verlangt werden. Wichtig ist zu wissen, daß dieses Werkzeug in der Lage ist, immer wiederkehrende Aufgaben mit Hilfe einer Scriptdatei zu lösen.
Ein Beispiel mag das verdeutlichen:
Sie haben 500 Textdateien, in denen immer wieder der Begriff “Synopsis” vorkommt. Sie wollen diesen Begriff nach “Syntax” ändern. Außerdem soll jeweils die 3. Zeile jeder dieser Dateien gelöscht werden. Das wäre unglaublich viel Arbeit, hätten wir nicht das Programm sed. Der Streameditor erlaubt uns verschiedene Aktionen auf einen Datenstrom auszuführen. Dazu erstellen wir eine Datei, die die notwendigen Befehle enthält. Nennen wir sie “befehle”:

1,$s/Synopsis/Syntax/g
3d

Jede Zeile enthält einen Befehl. Jeder Befehl besteht aus einer Adress-Angabe und dem Befehl selbst. Die erste Zeile hat die Adressangabe 1,$, was soviel heißt wie von der ersten Zeile bis zum Dateiende. Der Befehl ist s – das steht für substitute – also ersetzen. Der Befehl s hat die Form:
s/Suchbegriff/Ersetzungsbegriff/Optionen
Als Option haben wir g benutzt, was heißt, daß eine Zeile global durchsucht werden soll, nicht nur das erste Auftreten, sondern jedes soll ersetzt werden.
Die zweite Zeile unserer Datei ist noch einfacher, ihr Adress-Teil ist einfach die 3 und meint also Zeile 3. Der Befehl ist d und steht für delete also löschen. Es ist also die Anweisung, die Zeile 3 zu löschen.
Um diese Befehlsdatei jetzt anzuwenden, schreiben wir nur noch:
sed -f befehle Datei > Datei_neu
und schon wurde die Datei Datei bearbeitet. Das Ergebnis steht jetzt in Datei_neu. Eine kleine Schleife konstruiert, und schon könnten wir alle 500 Dateien mit einem Aufwasch bearbeiten…

Wie gesagt, die LPI 101-Prüfung besteht nicht darauf, daß Sie den sed vollständig beherrschen, aber ein paar Übungen dazu sind nicht verkehrt. Genauere Beschreibungen, was dieses Programm für Befehle versteht finden Sie auf der sed-Handbuchseite, oder hier: sed

sort

Dieses kleine Programm sortiert einen Eingabedatenstrom oder eine Datei zeilenweise und gibt das Ergebnis wieder auf die Standard-Ausgabe aus.

Normalerweise werden die ganzen Zeilen verglichen, um sie zu sortieren. Es ist aber auch möglich, Zeilen nach einem bestimmten Positionsfeld zu sortieren. Ein Beispiel:

Der Befehl ls -l gibt uns eine Liste aller Dateien im aktuellen Verzeichnis aus. Ab Spalte 31 steht die Dateigröße. Würden wir den Befehl

ls -l | sort

eingeben, dann würden die gesamten Zeilen sortiert. Das macht wenig Sinn, denn die Zeilen beginnen ja immer mit der Angabe der Zugriffsrechte und die zu sortieren ist sicher nicht das, was wir wollen. Um die Ausgabe nach Dateigröße zu sortieren können wir eingeben:

ls -l | sort +0.32

Dabei bedeutet 0.32 das erste Feld (0) und davon alles, ab dem 31. Buchstaben. (Die Angabe von Feldern bezieht sich auf Dateien, die tatsächlich feldorientiert aufgebaut sind, wie etwa /etc/passwd)

Alle Optionen und Möglichkeiten entnehmen Sie wieder der sort-Handbuchseite, oder hier: sort
1.103.2 Texte mittels Filterprogrammen bearbeiten weiterlesen