macOS-Terminal – Das kleine Einmaleins der Kommandozeile

Seite 4: Suchen und Filtern von Dateien

Inhaltsverzeichnis

Man kann das Ergebnis aber auch nachträglich filtern, etwa mit grep. Dieses Kommando sucht eigentlich eine Zeichenkette in einer Datei und gibt für Treffer die zugehörige Zeile aus.

grep Apple ~/Documents/MeinArtikel.txt

liefert beispielsweise jede Zeile der Datei MeinArtikel.txt, in der das Wort Apple auftaucht. (Trennungsstrich bitte nicht verwenden.) Will man nach Ausdrücken mit Leer- oder Sonderzeichen suchen, muss man die Zeichenkette in Anführungszeichen setzen. Sucht man beispielsweise nach Vor- und Nachnamen, lautet der Befehl

grep "Steve Jobs" ~/Documents/MeinArtikel.txt

Besonders nützlich ist grep im Alltag aber vor allem als Filter für längliche Ausgaben anderer Kommandos. Bildlich gesprochen verbindet man dazu zwei Befehle mit einer sogenannten Pipe, einer Art virtuellem Datenrohr. Was auf der einen Seite hineinkommt, läuft auf der anderen Seite in der gleichen Reihenfolge wieder heraus. Das alles erreicht man, in dem man einen senkrechten Strich (alt+7) zwischen zwei Kommandos schreibt. Der Befehl

ls -al ~/Documents | grep Backup

listet beispielsweise nur noch Dateien und Ordner, die das Wort Backup im Namen tragen. In diesem Fall sucht grep allerdings nicht mehr in jeder Datei, sondern nur noch im Datenstrom, der ihm vom ls-Befehl übergeben wird, also in den Dateinamen.

Noch umfangreicher kann man solche Suchmuster mit sogenannten regulären Ausdrücken eingrenzen. Ähnlich wie bei den Wildcards lassen sich einzelne Zeichen und Wertebereiche zur Suche heranziehen, zusätzlich aber auch Sonderzeichen wie ein Tabulator oder ein Zeilenumbruch einfügen. Steuerkommandos sorgen beispielsweise dafür, den Suchbegriff nur am Anfang oder Ende eines Wortes oder Dokumentes zu suchen. Diese Ausdrücke kommen häufig in Kombination mit dem Kommando grep zum Einsatz, weshalb man sie auch "grep pattern" nennt.

Der Ausdruck

ls -R | grep '^IMG_[36][0-9]*.jpg'

listet beispielsweise alle Dateien im aktuellen Verzeichnis (ls) oder darin enthaltenen Unterverzeichnissen (-R), deren Dateinamen mit der Zeichenkette IMG_ anfangen (^), dann eine 3 oder 6 enthalten ([36]), gefolgt von beliebig vielen (*) Zahlen ([0-9]) und die mit .jpg enden. Eine umfangreiche (aber englische) Einführung finden Sie beispielsweise im Handbuch des kostenlosen Editors TextWrangler.

Ist die Ergebnisliste eines beliebigen Kommandos sehr lang, reicht man die Datenflut mittels Pipe an das Anzeigeprogramm less weiter:

ls -al ~/Library | less

Das zeigt die Ausgaben seitenweise an. Mit der Leertaste blättert man zur nächsten Seite, mit einem Druck auf b (back) eine Seite zurück, q beendet das Programm. Es gibt noch zahlreiche weitere Funktionen in less, ein Druck auf h listet sie alle.

Sollen die Ergebnisse an Dritte verschickt werden, etwa per Mail, kann man die Ausgaben auch in eine Datei schreiben lassen. Dazu kommt das Größer-Zeichen > zum Einsatz. Im Terminal sieht das dann aus wie ein Trichter, der die Ausgaben eines Kommandos in eine Datei füllt:

ls -al ~/Library > ~/Desktop/dir.txt