tech

MACup 11.2002: Sherlock im Terminal

grep mit Puderzucker Über das Terminal lassen sich die beiden Programme find und grep steuern. Ähnlich wie Sherlock, das Dateien nach Kriterien sucht und findet, verhält sich find. Als Besonderheit bietet das Suchprogramm der Unix-Shell die Möglichkeit, die gefundenen Ergebnisse an eine andere Applikation weiterzugeben. So lassen sich alle Dateien auf einmal an einen anderen Ort bewegen oder löschen. Die Anwendung grep durchsucht den Inhalt von Dateien nach einem Suchmuster. Die schnellere Variante fgrep (fast-grep) ignoriert dabei Regular Expressions (Reguläre Ausdrücke), die auf dem international anerkannten X/Open-Standard basieren und zum Erkennen und logischen Erschließen von Begriffs- und Textmustern dienen. Mit Regular Expressions lässt sich auch nach Zeilenumbrüchen oder speziellen Zeichenketten suchen, wobei Letzteres für Programmierer interessant ist. Keines der beiden Programme benötigt eine Indizierung und sind durch Parameter zu steuern. Ein Parameter wird meist mit dem Zeichen – eingeleitet. Die Liste der möglichen Parameter für find und grep ist lang. Mit der Terminal-Eingabe von man find beziehungsweise man grep lassen sich die Parameter auflisten, die in dieser Liste nicht angeführt sind.
Der find-Parameter -exec ruft ein externes Programm auf und übergibt die Suchergebnisse als Parameter. Wenn durch den Befehl Dateien gelöscht oder überschrieben werden, wird nicht mehr nachgefragt. Falls das unerwünscht ist, ersetzt man -exec durch -ok und kann jeden Vorgang mit y bestätigen. Die Suche beginnt im angegebenen Pfad. Möchte man den gesamten Computer durchsuchen, ist als Pfad / anzugeben. Natürlich lassen sich nur Verzeichnisse und Dateien durchsuchen, für die der aktuelle Benutzer die entsprechenden Zugriffsrechte hat. Ist die Ausgabe eines Befehles dabei für das Terminalfenster zu lang, lässt sich diese mit angehängtem | more auch seitenweise darstellen.

Beim Satz des Artikels "grep mit Puderzucker" in der aktuellen MACup 11.2002 sind einige Zeichen in den Befehlsfolgen verloren gegangen. Da es aber ohne diese Zeichen nicht geht, stellen wir hier die Befehle noch einmal vor und als Zugabe noch ein paar mehr dazu. Die Redaktion bittet diesen Fehler zu entschuldigen.

Beispiele für "find"

Suchen nach Name
Zeige alle Objekte, in deren Namen "macup" vorkommt (-name \*macup\*).
Würde man das Zeichen "*" nicht mit dem Backslash "\" markieren, würde es die Shell interpretieren und nicht der Befehl find. Ab Mac OS X v10.2 ist auch der Parameter -iname möglich der Gross/Kleinschreibung ignoriert.

find /Pfad/ -name \*macup\*

Suchen nach Alter
Zeige alle Ordner und Unterordner (-type d) an die jünger als 3 Tage
(-ctime -3) sind. Ab Mac OS X v10.2 ist auch -cmin mit Minutenagaben möglich.

find /Pfad/ -type d -ctime -3

Löschen
Lösche (-exec rm) alle Dateien (-type f), die älter als 2 Wochen (-ctime +14) sind. ACHTUNG: Hier wird nicht nachgefragt, sondern einfach gelöscht!

find /Pfad/ -type f -ctime +14 -exec rm {} \;

Bewegen
Bewege (-exec mv) alle Dokumente (-type f) mit der Endung .jpg (-name \*\.jpg; Die Zeichen "*" und "." wurden markiert) in den Ordner Pfad2.

find /Pfad1/ -type f -name \*\.jpg -exec mv {} /Pfad2/ \;

Negativsuche
Lösche (-exec rm) alle Dokumente deren Name nicht mit .jpg endet (\! -name \*\.jpg).

find /Pfad/ -type f \! -name \*\.jpg -exec rm {} \;

Verknüpfen
Wie eben, nur daß weder .jpg noch .tiff gelöscht wird. Die Argumente stehen in Klammern, die wiederum mit einem "\" markiert werden müssen.

find /Pfad/ -type f \! \( -name \*\.jpg -or -name \*\.tiff \) -exec rm {} \;

Beispiele für "grep"

Einfaches durchsuchen
Durchsucht die Datei /Pfad/Datei nach der Zeichenfolge Suchwort und zeigt die Zeile mit dem Vorkommen an.

fgrep Suchwort /Pfad/Datei

Gross/Kleinschreibung
Wie eben, nur wird die Goss/Kleinschreibung ignoriert.

fgrep -i Suchwort /Pfad/Datei

Kontext
Zeige auch 2 Zeilen nach (-A 2) und vor (-B 2) dem Vorkommen des Suchwortes

fgrep -A 2 -B 2 Suchwort /Pfad/Datei

Zählen
Zeige kein Zeilen an und zähle (-c) die Vorkommnisse von Suchwort

fgrep -c Suchwort /Pfad/Datei

Umkehr
Zeige alle Zeilen an, in denen das Suchwort nicht (-v) vorkommt.

fgrep -v Suchwort /Pfad/Datei

Ganze Ordner
Gibt man anstelle eines Dateinamens einen Stern "*" an, werden alle Dateien im Verzeichnis /Pfad/ durchsucht. In diesem Beispiel werden alle Dateien in allen Unterordnern (-r) von /Pfad/ durchsucht

fgrep -r Suchwort /Pfad/*

Datei anzeigen
Der Parameter -H zeigt vor der Zeile mit dem Suchwort die Datei mit an.

fgrep -H Suchwort /Pfad/*

Gemeinsam sind wir stark
Die Befehle "find" und "grep" lassen sich wunderbar kombinieren. Der folgende Befehl sucht nach allen Dokumenten in /Pfad mit der Endung .txt und durchsucht diese nach dem Suchwort.

find /Pfad/ -name \*\.txt -exec fgrep -H Suchwort {} \;

Dieses Beispiel ist natürlich nur eines von unzähligen Kombinationsmöglichkeiten, die mit den beiden Suchprogrammen und dem Terminal möglich sind. Autor: Felix Havemann

Weiterführende Informationen
MACup Abo

Kommentare sind geschlossen.

Powered by WordPress. Designed by Woo Themes

%d Bloggern gefällt das: