ABSTRACT: kurzeinfuehrung fuer den "grep" befehl zum suchen in textfiles. AUDIENCE: beginners SYSTEM: any unix SECTION: basic unix commands AUTHOR: mond COPYRIGHT: GNU Free Documentation Licence http://www.gnu.org/licenses/fdl.txt heute machen wir den befehl "grep". wir haben ihn schon einige male benutzt zum suchen in text files. man kann ihn auf 2 arten verwenden: grep suchmuster file1.txt file2.txt file3.txt wuerde "suchmuster" in den 3 files file1.txt bis file3.txt suchen. oder man verwendet ihn als filter: cat blabla.txt | grep suchmuster wuerde 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 waere zb. grep "[Bb]l*[ioa]" *.txt das wuerde in allen datein mit der endung .txt die im aktuellen verzeichniss liegen die zeilen suchen in denen blla bllllli Blo oder aehnliches 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 [] heisst eines von denen das * heisst vom vorigen zeichen 0 oder mehrer vorkomnisse von zeichen davor. grep "ab*c" wuerde ac abc abbbc abbbbbbbbc etc.. finden.. nicht aber abba grep "a[bcd]e" wuerde abe ace ade finden. grep "a[^efg]c" wuerde alle vorkommisse von a?c finden wobei ? ein beliebiger buchstabe ausser e oder f oder g waere... (das ^ im [ ] heisst alle buchstaben bis auf die vorkommenden..) grep "a.b" wuerde nach allen a?b suchen. der punkt . heisst: ein beliebiges zeichen. wenn du nach zeichen suche willst die im grep eine spezielle bedeutung haben dann musst diese "escapen": d.h. mit einem \ schreiben. da in der shell \ auch escape ist eventuell dann \\\ schreiben: grep \\\".*\\\" *.txt wuerde alle zeilen suchen die einen text in anfuehrungszeichen enthalten.. grep "\".*\"" *.txt ebenfalls. grep "\]" wuerde alle zeilen suchen die ein ] enthalten. grep " [a-z][0-9][0-9]* " wuerde 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 das selbe ist) mit dem kannst dann noch kompliziertere suchmusster bauen: egrep "a{3,5}b" wuerde alle stellen finden in den 3 bis 5 a's von eimem b gefolgt werden... aber das braucht man kaum. hier noch ein paar andere NUETZLICHE 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 wuerde den dext 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 wuerde ueberall in den HOWTO documneten nach dem wort "printing" suchen. (vorausgesetzt diese howto files liegen in diesem verzeichniss. das ist aber bei allen distributionen unterschiedlich. aber mit locate kannst du ja suchen wo die howtos bei dir liegen. EXERCISES: such dir ein verzeichniss mit moeglichst vielen text files und verwende grep um nach interessanten woertern zu suchen. REFERENCES: man grep grep --help