Tutorial – OS X Terminal – Suchen und Finden

terminal_beitragsbild

Wenn wir uns mit dem Suchen und Finden von Informationen auf dem Mac beschäftigen, dann darf der Befehl grep auf gar keinen Fall fehlen. grep gehört zu den wichtigsten Kommandos auf Unix-Systemen und ist so essentiell wie das Einmaleins in der Schule. In seinen Grundzügen ist der Befehl recht einfach zu verstehen. Wer aber möchte, kann damit sehr komplexe und mächtige Abfragen bauen. Die gilt vor allem, wenn reguläre Ausdrücke mit ins Spiel kommen. Alleine darüber ließe sich ein Buch, geschweige denn mehrere Tutorials füllen. Wir möchten es heute aber nicht ganz so weit treiben, lernen aber dennoch an vielen Beispielen die Funktion von grep kennen.

Der Aufruf von grep ist ganz simpel. Als erstes kommt das Suchmuster, sprich wonach gesucht werden soll und danach kommt die Angabe wo nachgesehen wird. Wenn man dies ausprobieren möchte, öffnet man einfach das Terminal und gibt den unten stehenden Befehl ein.

grep sucht hier nach dem Wort SSH in der Datei services. Für alle die noch nicht viel Erfahrung mit der OS X Shell haben noch mal eine kleine Wiederholung. Generell wird zwischen Groß- und Kleinschreibung unterschieden. Dies gilt sowohl für das Suchwort als auch für den Dateinamen. Für grep sind daher SSH und ssh zwei unterschiedliche Worte. Danach folgt wie schon erwähnt die Angabe wo gesucht werden soll. Hier beinhaltet das nicht nur den Dateinamen (services), sondern auch den Pfad zu dieser Datei (/etc). etc ist ein Ordner, in dem ausschließlich Konfigurationsdateien liegen, die für den gesamten Rechner gelten.

Nach dem Wir nun erste Bekanntschaft mit grep geschlossen haben, können wir mit weiteren Beispielen fortfahren. Wer diese ausprobieren möchte, sollte sich vielleicht einen Ordner mit drei bis vier Textdateien erstellen und diese mit Inhalt füllen. So kann man direkt herausfinden, was die vielen Schalter und Optionen von grep bewirken.

grep versteht wie viele andere Unix-Befehle auch den Platzhalter * (Stern). Die Angabe von *.txt besagt, suche in allen Dateien in diesem Ordner die auf txt enden. Zwischen grep und *.txt haben wir wieder das Suchwort

Soll das Suchmuster ein Leerzeichen enthalten, so muss es mit einfachen oder doppelten Gänsefüßchen umschlossen werden. grep könnte ansonsten nicht erkennen wo die Dateiangabe beginnt.

Nachdem die generelle Syntax bekannt ist, lernen wir den ersten Schalter kennen. Mit -r kann eine rekursive Suche begonnen werden. Bisher haben wir nur Dateien im aktuellen Verzeichnis unter die Lupe genommen. Soll die Suche jedoch auch in Unterordnern fortgesetzt werden, muss man sich dieses Schalters bedienen. Im Fachjargon spricht man auch vom “im Verzeichnisbaum herabsteigen”.

Wie eingangs erwähnt unterscheidet OS X wie alle Unix-Derivate zwischen Groß- und Kleinschreibung. Sollte man jedoch nicht mehr wissen wie ein Wort, das gefunden werden soll, in einer Datei steht, kann dieses Verhalten auch einfach mit -i deaktiviert werden. Alternativ zu -i kann auch die lange Schreibweise –ignore-case verwendet werden. Als Faustregel kann man sich merken das Optionen, die nur aus einem Buchstaben bestehen, auch nur mit einem vorangestellten Bindestrich geschrieben werden. Bei Schaltern, die als ganzes Wort geschrieben werden, jedoch mit zwei Bindestrichen eingeleitet werden. Dies gilt für fast alle Unix-Befehle und nicht nur für grep.

Ein Problem bei der obigen Abfrage ist, dass auch Wörter gefunden werden, welche Apfel nur als Teilwort enthalten. grep würde daher auch Apfelbaum oder Apfelwein finden. Soll jedoch nur nach einem alleinstehenden Begriff gesucht werden, ist -w hinzuzufügen. An diesem Beispiel sehen wir auch sehr schön, dass mehrere Optionen kombiniert werden können.

Hat grep bei einer Abfrage einen Treffer, führt er immer den Dateinamen, gefolgt vom gefundenen Wort auf. Damit das deutlich wird, hier ein kleines Beispiel.

In manchen Fällen möchte man aber einfach nur den Dateinamen wissen und nicht mehr. Das ist häufig in kleinen selbst programmierten Scripten der Fall, wenn die Ausgabe von grep an einen anderen Befehl zur Weiterverarbeitung übergegeben wird. Um dies zu erreichen, wird -l oder dessen Langform –files-with-matches verwendet.

Eine weitere nützliche Sache ist die Option -c. Hiermit werden ebenfalls wieder alle Dateinamen ausgegeben, in denen das gesuchte Wort gefunden wurde. Zusätzlich wird aber auch noch die Anzahl der gefundenen Worte angezeigt. Das c steht dabei für Count und kann mit dieser Eselsbrücke sicher leichter behalten werden.

Um das nächste Beispiel besser verdeutlichen zu können, bitten wir euch zunächst diesen Befehl in das Terminal einzugeben.

Mit ps können wir alle auf dem Mac laufenden Prozesse auflisten. Je nach Anzahl der im Hintergrund laufenden Programme kann die Ausgabe locker 300 Zeilen umfassen. Es wäre ziemlich mühselig, wenn wir die Ausgabe nicht durch grep filtern würden. Um dies zu erreichen, können wir die Ausgabe von ps umleiten und an grep weiter geben. Dies geschieht mit dem senkrechten Strich, der auch Pipe genannt wird. Eingegeben werden kann er mit der Tastenkombination CMD + 7. Statt wie bisher, können wir uns hinter grep den Eintrag für den Dateinamen sparen, da der Input ja von ps kommt. Wenn man das Prinzip der Umleitung mittels einer Pipe erst einmal verstanden hat, hat man ein sehr mächtiges Werkzeug an der Hand, mit dessen Hilfe diverse Unix-Befehle miteinander kombiniert werden können.

Kommen wir zum letzten Abschnitt dieses Tutorials, den regulären Ausdrücken. Leider können wir das Thema nur streifen, da es einfach zu umfangreich und komplex ist, um es hier zu behandeln.  Es gibt aber einen guten Einblick darin, was mit regulären Ausdrücken alles möglich ist und das es lohnenswert ist, sich eingehender damit zu beschäftigen. Für den Anfang starten wir mit einem ganz einfachen Beispiel.

grep muss erst noch mitgeteilt werden, dass das Suchmuster nun als regulärer Ausdruck geschrieben wird. Dies geschieht mit -E. Der Punkt bei regulären Ausdrücken steht für einbeliebiges Zeichen, also a-z, A-Z, 1-9 und alle Sonderzeichen. Wie man vielleicht schon erahnen kann, wollen wir alle Worte finden, welche mit “baum“ enden. Da es aber kaum vorstellbar ist das vor baum nur ein Buchstabe steht (denn dafür steht der Punkt), benötigen wir noch einen * (Stern). Der Stern besagt nämlich das ein Zeichen beliebig oft vorkommen darf. Der Stern ergänzt sozusagen den Punkt und gibt ihm eine weiter gefasste Logik.

Nun wollen wir eine Oder-Abfrage erzeugen. Finde alle Dateien in denen Apfelbaum oder Birnbaum vorkommen. Für diese Abfrage benötigen wir einen senkrechten Strich, den wir schon etwas weiter oben kennengelernt haben. In diesem Fall hat das Zeichen aber eine andere Bedeutung und leitet nichts weiter, wie eine Pipe.

So, das war es mit unserem dritten Teil zu “Suchen und Finden” auf dem Mac. Als Beispiel noch mal eine komplexe Abfrage. Der unten stehende Ausdruck sieht zwar ziemlich kryptisch aus, aber man kann uns glauben, er findet alle E-Mail-Adressen in einer Datei – einfach ausprobieren.

Advertisements

Hinterlasse einen Kommentar

Eingeordnet unter Allgemein

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s