103.2 Textströme mit Filtern verarbeiten

Aus ITWiki
Zur Navigation springen Zur Suche springen

1 Einleitung

Textströme und Textdateien mit Filtern verarbeiten

2 Begriffsklärung

Was ist ein Textstrom? Ein Textstrom ist eine Dateiübertragung in Textform.

Was ist der Unterschied zu einer Textdatei? Ein Textstrom liefert Daten an eine Textdatei.

Was ist ein Filter Ein Filter ist ein Programm, welches die Ausgabe eines Befehls als Eingabe verwertet. Es wird in Linux mit einer sogenannten Pipe gekennzeichnet. So schaut eine Pipe in der Kommandozeile aus : | . Eine Pipe signalisiert einen Textstrom.

3 Relevante Filter

Die folgenden Filter sind relevant. Sie werden sehr kompakt mit jeweils einem Beispiel dargestellt.

3.1 cat

Eines der Standardbefehle bei der Arbeit in dem Linux-Terminal. Von der Namensbedeutung her ist der Befehl ursprünglich dazu gedacht, Dateien vertikal zusammenzufügen (concatenate, verketten). In der Praxis wird er aber oft verwendet um den Inhalt einer Datei komplett auszugeben auf dem Terminal.

Beispiel : cat /var/log/syslog Gibt die komplette Syslog Datei auf dem Terminal aus

3.2 bzcat, xzcat und zcat

Möchte man eine komprimierte Datei im Terminal ausgeben, kann man einen dieser drei Befehle verwenden. Der Befehl verhält sich ansonsten ähnlich wie cat. Dabei verwendet bzcat das Kompressionsprogrammm bzip2, xzcat das Programm xz (beide Verlinken lediglich auf das Programm). zcat ist eine eigenständiges Programm und wird in der Regel für die gleichen Programme wie gzip verwendet.

Zusatzinfo
bzip2 - Dieser Algorithmus ist leistungsfähiger als gzip und wird gerne für große Datenmengen verwendet.

Beispiel: bzcat gepackteDatei.bz Leitet den Inhalt der Datei in die Standardausgabe.

3.3 head

Dieser Befehl zeigt die ersten (Standardmäßig 10) Zeilen einer Textdatei.

Beispiel: head /var/log/syslog Zeigt die ersten zehn Zeilen der Systemlog Datei.

3.4 tail

Dieser Befehl zeigt die letzten (Standardmäßig 10) Zeilen einer Textdatei.

Beispiel: tail /var/log/syslog Zeigt die letzten zehn Zeilen der Systemlog Datei.

3.5 less

Dieser Befehl zeigt eine Textdatei Seitenweise. Man kann – im Gegensatz zum veralteten Befehl "more" – vor- und zurücknavigieren.

Beispiel: less Textdatei.txt Zeigt die Dateiinhalte Seitenweise.

3.6 nl

Dieser Befehl setzt vor die Zeilen einer Textdatei eine Nummer zur besseren Ablesbarkeit.

Beispiel: nl Textdatei.txt > nummerierte_Textdatei.txt Nummeriert die Zeilen der Datei und gibt sie in einer neuen Datei aus. Die Anzeige der Änderungen kann anschließend mit cat erfolgen.

3.7 wc

Dieser Befehl zählt die Wörter einer Textdatei.


Beispiel: wc * Zeigt die Wortzahl aller Dateien im aktuellen Pfad.

3.8 hexdump

Wandelt die Ausgabe einer Datei in Hexadezimal-, Oktal-, Dezimalzahlen oder ASCII Zeichen um. Es kann nahezu alles als Eingabe verwendet werden, auch Binärdateien. Die Voreinstellung ist Hexadezimal.

Beispiel: hexdump Textdatei.txt Zeigt die Dateiinhalte im Hexadezimalformat.

3.9 od

Erledigt das gleiche wie hexdump. Einige Distributionen arbeiten mit hexdump, andere mit od und wieder andere mit beiden. Die Voreinstellung ist Oktal. Od hat verglichen mit hexdump etwas weniger Funktionen.

Beispiel: od Textdatei.txt Zeigt die Dateiinhalte im Oktalformat.

3.10 sort

Sortiert die Zeilen von Text- und anderen Dateien.

Beispiel sort -n textfile1 Sortiert die Textdatei in numerischer Reihenfolge (-n). history | sort -n Sortiert die History in numerischer Reihenfolge (-n). history | sort Sortiert die History in alphabetischer Reihenfolge (-n).

3.11 uniq

Zeigt nur die einzigartigen Zeilen einer Datei. Funktioniert nur nach sort

Beispiel : sort textfile.txt | uniq Sortiert die Datei und gibt nur einzigartige Zeilen aus.

3.12 split

Spaltet Dateien in mehrere. Die Angaben sind Standardmäßig Zeilenbasiert, können aber auch Dateigrößenorientiert sein (split -b). Standardangabe ist ein Split nach 1000 Zeilen.

Beispiel : split -b 11m grosses-paket grosses-paket-split Teilt die Quelldatei "grosses-paket" in mehrere 11MB große Teilpakete "grosses-paket-split". Die Ausgabe erzeugt mehrere Dateien, welche in folgender Logik an den Dateinamen angehängt werden "grosses-paket-splitaa","grosses-paket-splitab" usw..

3.13 cut,paste

Cut schneidet Spalten einer Textdatei aus. Es ist jedoch nicht mit dem Windows "Ausschneiden" zu verwechseln, da die Spalten in der Originaldatei bestehen bleiben. Zum erfolgreichen ausschneiden der Spalten benötigt man eine Angabe der Spalte (z.B. "-f2") und einen sogenannten Delimiter, welcher die Spalten voneinander trennt (z.B. "d:", also hier ein Doppelpunkt). Der Befehl Paste fügt zwei oder mehr Dateien zusammen. Im Gegensatz zu cat werden diese horizontal zusammengefügt.

Beispiel : In der Datei /etc/passwd stehen die Benutzernamen in der ersten Spalte. Diese Datei enthält jedoch auch weitere Informationen:

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh

Der folgende Befehl führt dazu, dass nur die Benutzernamen ausgegeben werden: cut -d: -f1 /etc/passwd
root
daemon
bin

3.14 sed

Der sed Editor gehört nicht in dieses Kapitel und wird nur der Vollständigkeit halber erwähnt.

3.15 tr

Der Befehl tr steht für translate und ist am besten durch die Funktion "Suchen und Ersetzen" aus Excel zu vergleichen. Es werden bestimmte Zeichen oder Wörter einer Datei durch andere ersetzt.

Beispiel: cat textfile1 | tr n x Ersetzt alle Buchstaben "n" mit dem Buchstaben "x"

3.16 md5sum,sha256sum,sha512sum

Die drei genannten Befehle arbeiten alle nach derselben Syntax und haben den gleichen Zweck. Sie erstellen Prüfsummen für die jeweilige Datei, welche wiederum wichtig für Datenintegrität,-sicherheit und -authentizität sind. Es lassen sich mit den jeweiligen Befehlen auch die entsprechenden Hashwerte auslesen.

Beispiel: sha512sum textfile.txt > SHA512SUMS Erstellt einen Secure Hash Algorithm 2 (SHA) mit 64-Bit Schlüsselwörtern (512).

4 Kontrollfragen

Was ist ein Textstrom?

Datenübertragung (Text oder Numerisch, binär usw.). In der UNIX Philosophie sollen alle Datenübertragungen idealerweise in Textform realisiert werden, sodass die Programme untereinander kompatibel sind. Die Datenübertragung mittels Textstrom wird i.d.R. durch eine Pipe veranlasst.

Was passiert bei folgender Befehlszeile : cat > textdatei.txt

Die Standardeingabe (Tastatur i.d.R.) wird in diese Datei umgelenkt. Die Konsole springt in eine leere Zeile und alles was man nun eintippt wird anschließend in die textdatei.txt übertragen. Die Eingabe wird mit STRG+D oder alternativ STRG+C beendet.

Was passiert bei folgender Befehlszeile : cat < textdatei.txt | uniq

Der Inhalt der Datei wird zur Standardausgabe. Folglich wird auf der Konsole der Inhalt der Textdatei angezeigt. Es werden lediglich einzigartige Zeilen ausgegeben.

Wie kann man die Dateien in einem Verzeichnis nach Dateigröße sortieren?

ls -s | sort -n

Was passiert bei folgender Befehlszeile : dd if=/dev/sda bs=512 count=1|od -h --endian=big | nl

Der Master-Boot-Record (die ersten 512 Byte der Festplatte) wird ausgegeben. Der Befehl od -h gibt ihn in Hexadezimaler Form aus und der Befehl nl nummeriert die Zeilen.