| |
|
|
| |

grep
Wir haben grep schon einige Male verwendet um nach einer Wortkette in Textdateien zu suchen.
Man kann den Befehl auf 2 Arten verwenden:
grep suchmuster file1.txt file2.txt file3.txt
würde "suchmuster" in den 3 Files file1.txt bis file3.txt suchen.
Oder man verwendet ihn als Filter:
cat blabla.txt | grep suchmuster
würde das Suchmuster in der Ausgabe von "cat blabla.txt" oder der
Ausgabe jedes anderen Programms suchen.. (z.B. locate, find, fortune,
zcat oder was auch immer...)
Suchmuster kann entweder eine einfache Zeichenkette sein, z.B.:
grep bla *.txt
oder eine sogenannte "regular expression":
eine regular expression ist z.B.
grep "[Bb]l*[ioa]" *.txt
das würde in allen Dateien mit der Endung .txt, die im aktuellen
Verzeichnis liegen die Zeilen suchen, in denen blla bllllli Blo oder
ähnliches steht.. (mit einem grossen oder kleinen B beginnen) dann
beliebig viele l (auch 0) und danach entweder ein i oder ein o oder ein
a haben.
Die Zeichen in [] heißt eines von denen.
Das * heißt vom vorigen Zeichen 0
oder mehrere Vorkomnisse des Zeichens davor.
grep "ab*c" würde ac abc abbbc abbbbbbbbc etc.. finden..
nicht aber abba
grep "a[bcd]e" würde abe ace ade finden.
grep "a[^efg]c" würde alle Vorkommisse von a?c finden wobei ?
ein beliebiger Buchstabe außer e oder f oder g wäre...
(das ^ im [ ] heißt alle Buchstaben, bis auf die Angegebenen..)
grep "a.b" würde nach allen a?b suchen. der Punkt . heisst: ein
beliebiges Zeichen.
Wenn du nach Zeichen suchen willst, die in grep eine spezielle Bedeutung
haben, dann musst diese "escapen": d.h. mit einem \ schreiben.
grep \".*\" *.txt würde alle Zeilen suchen, die einen
Text in Anführungszeichen enthalten..
grep "\]" würde alle Zeilen suchen die ein ] enthalten.
grep " [a-z][0-9][0-9]* "
würde alle Stellen finden, wo ein Wort (hinten und vorne Leerzeichen) ist,
dass mit den Buchstaben a-z beginned und dann eine Zahl mit mindesten
einer oder mehr Stellen hat..
Es gibt dann noch grep -E (oder auch egrep, was dasselbe ist);
mit dem kannst dann noch kompliziertere Suchmuster bauen:
egrep "a{3,5}b" würde alle Stellen finden, in denen 3 bis
5 a's von eimem b gefolgt werden...
aber das braucht man kaum.
Hier noch ein paar andere NÜTZLICHE Switches von grep:
-i .... ignore case. Gross- und Kleinschreibung ist egal
-5 (oder eine andere zahl) bei der Ausgabe werden 5 Zeilen vor und 5 Zeilen
nach der gefunden Stelle ausgegeben.
-c gibt die Zeilen nicht aus sondern nur wie oft der Suchbegriff vorkommt
-n gibt auch immer die Zeilennummer an, wo der Suchstring vorkommt.
und dann gibt es noch:
zgrep blabla *.gz
würde den Text blabla in den .gz Files suchen aber diese vor dem Suchen
zuerst auspacken.. ist praktisch wenn man in den Hilfetexten sucht:
zgrep printing /usr/share/doc/HOWTO/en-txt/*.gz
würde überall in den HOWTO Dokumneten nach dem Wort "printing" suchen.
(vorausgesetzt diese howto Files liegen in diesem Verzeichnis. Das ist
aber bei allen Distributionen unterschiedlich. Aber mit locate kannst du
ja suchen, wo die Howtos bei dir liegen.
EXERCISES:
Such dir ein Verzeichnis mit möglichst vielen Textdateien und verwende
grep um nach interessanten Wörtern zu suchen.
REFERENCES:
man grep
grep --help
|
|
| |
|
|
|