![]() |
|
||||||||||||||||||
|
|||||||||||||||||||
|
|||||||||||||||||||
von Elisabeth Bauer
"Was man nicht im Kopf hat, muss man im Computer haben" ist eigentlich ein schönes Prinzip. Doch im Gegensatz zum menschlichen Gedächtnis, das -- außer in der Abschlussprüfung -- das gespeicherte Wissen meist zuverlässig parat hat, lassen sich Informationen auf der Festplatte oft nicht so einfach wiederfinden. Hat man Dateinamen und Speicherort vergessen, vergeht schnell viel Zeit mit dem Durchsuchen von Verzeichnissen, und selbst wenn man genau weiß, in welcher Datei die gesuchte Information steckt, nutzt das bei langen Textdateien herzlich wenig.
In beiden Fällen hilft das Shell-Kommando grep, das in Texten nach angegebenen Mustern sucht. Im einfachsten Fall ruft man grep mit dem Suchbegriff und der Datei auf, in der er suchen soll. Grep gibt alle Zeilen der angegebenen Datei aus, die den Begriff enthalten.
Um beispielsweise in der in Textform gespeicherten Luther-Bibel nach allen Vorkommen des Garten Eden zu suchen, tippt man
grep Eden bibel.txt
in die Shell, und grep wirft alle gefundenen Bibelstellen aus. Enthält der Suchbegriff Leerzeichen, muss man ihn in Anführungszeichen setzen. Bei den Sonderzeichen lauert eine kleine Tücke: Die Zeichen *, ? und ! haben für die Shell eine besondere Bedeutung. Eine weitere Gruppe (., *, ^, $ und \) hingegen wird von Grep nicht als normale Zeichen, sondern als so genannte reguläre Ausdrücke verstanden (siehe Kasten Seite ##). Damit lassen sich sehr mächtige und komplexe Suchabfragen konstruieren, doch für die ersten Schritte mit Grep verzichtet man besser ganz darauf, diese Zeichen in Suchbegriffen zu verwenden.
Wenn man nicht mehr weiß, in welcher Datei die gesuchte Stelle steht, ruft man grep mit einer Wildcard (*) auf. Die vom Projekt Gutenberg gespeicherte Version von Nietzsches "Also sprach Zarathustra" besteht aus vielen einzelnen HTML-Dateien.
grep Weisheit *.htm
zeigt alle Vorkommen des Worts Weisheit in Nietzsches philosophischem Hauptwerk an (siehe Abbildung 1). Das Sternchen steht für beliebige Buchstaben, die Shell ersetzt den letzten Ausdruck also durch alle Dateinamen im aktuellen Verzeichnis, die auf .htm enden.
Sind die Dateien, die man durchsuchen will, auf mehrere Verzeichnisse verteilt, kann man grep mit der Option -r anweisen, einen Ordner rekursiv zu durchforsten:
grep -r Weisheit nietzsche/werke/
sucht im Ordner werke und allen Unterverzeichnissen nach der Weisheit.
Praktisch ist grep jedoch nicht nur für philosophische oder theologische Textrecherchen, sondern auch im Zusammenspiel mit anderen Shell-Kommandos. Wenn ein Kommando viel Text ausgibt, lässt sich mit dem Pipe-Zeichen (|) und darauf folgendem grep suchbegriff die Ausgabe auf die relevanten Teile reduzieren. Ein klassischer Anwendungsfall ist der Abschuss eines nicht mehr reagierenden Programms von der Shell aus:
Das Kommando ps ax listet alle Prozesse auf; diese Liste reicht man mit dem Pipe-Zeichen an grep weiter und filtert das gesuchte Programm aus. Eine Suche nach Mozilla ergibt beispielsweise Folgendes:
> ps ax | grep mozilla 2500 ? S 1:40 /usr/lib/mozilla-1.3/mozilla-bin 5645 pts/4 S 0:00 grep mozilla
Grep liefert gleich zwei Treffer mit Mozilla im Namen -- nicht nur den laufenden Browser, sondern auch sich selbst. Am Beginn jeder Zeile steht der interessante Teil: die Prozess-ID, anhand der man Programme mit dem Kommando kill von der Shell aus beenden kann. Nun kann man den hängenden Mozilla durch die Eingabe von kill 2500 beenden.
Als notorisch tippfauler Shell-Guru verspürt man natürlich wenig Lust, dieses Kommando, das man doch häufiger braucht, jedesmal komplett einzugeben: Kurzum, ein alias muss her. Alias-Definitionen speichert man am besten in der Datei .bashrc im Home-Verzeichnis, die bei jedem Start einer interaktiven Shell ausgeführt wird. Öffnen Sie die Datei in einem Text-Editor, je nach Vorliebe grafisch mit kwrite ~/.bashrc & oder auf der Shell mit vi ~/.bashrc. Für den nicht unkomplizierten vi geben wir hier wieder eine Kurzanleitung: Mit der Eingabe von G springt vi ans Ende der Datei, mit o schalten Sie den Editor in den Eingabe-Modus -- im Gegensatz zu den Befehlen a und i beginnt vi gleich eine neue Zeile und setzt den Cursor dorthin.
In die letzte Zeile der .bashrc tragen Sie nun das Alias ein. Anstelle von pss kann jeder Name stehen, den Sie sich leicht merken können -- nur ein existierendes Kommando sollte nicht genauso heißen:
alias pss="ps ax | grep"
Das war's auch schon: Mit [Esc] ZZ oder [Escape] :wq sichern Sie die Datei und beenden vi. Damit man das frisch gesetzte Alias gleich verwenden kann, muss in der schon geöffneten Shell die Konfigurationsdatei neu eingelesen werden. Geben Sie dazu:
. ~/.bashrc
ein. Ab sofort kann man nun mit pss programm nach laufenden Programmen suchen.
Grep lässt sich enorm vielseitig einsetzen. Meine persönliche Lieblingsanwendung von Grep ist jedoch ein schlichtes Adressbuch.
Als Zutaten braucht man dazu nur die Befehle grep, alias und cat sowie eine Textdatei, in der man jeweils in eigene Zeilen Namen, Telefon, E-Mail-Adresse und Adresse seiner Freunde, Bekannten und Anverwandten einträgt; ein Adresseintrag könnte beispielsweise so aussehen:
Kalle Pinguin +67211 111 tux@linux.org Südpolstraße 1 Tuxhausen, Antarktis
Die Datei speichert man als adressbuch im Home-Verzeichnis. In die Datei .bashrc trägt man nun folgendes Alias ein:
alias tel="cat ~/adressbuch | grep -i -A 4"
Der Befehl cat gibt die Datei adressbuch aus. Mit dem Pipe-Zeichen (|) schicken Sie diese Ausgabe an grep weiter. Die Option -i ("case-insensitive") sorgt dafür, dass bei der Suche auf Groß- und Kleinschreibung nicht geachtet wird. -A 4 schließlich weist grep an, zur gefundenen Zeile noch vier Folgezeilen auszugeben.
Mit
. ~/.bashrc
wird die Konfigurationsdatei neu gelesen. In Zukunft genügt die Eingabe tel name in der Shell, um vom Gesuchten die Adresse zu erhalten -- schneller geht's nicht! (eba)
| Grep in Kürze |
|
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links" nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedruckten Fassung entsprechen.
Druckerfreundliche Version |
Feedback zu dieser Seite |
Datenschutz |
© 2010 Linux New Media AG |
Last modified: 2007-01-25 16:30
[Linux-Magazin]
[LinuxUser]
[Linux-Community]
[Admin-Magazin]
[Ubuntu User]
[Linux Events]
[Linux Magazine]
[Ubuntu User]
[Admin Magazine]
[Linux Magazine Poland]
[Linux Community Poland]
[Linux Magazine Brasil]
[Linux Magazine Spain]
[Linux Technical Review]