grep ist eine einfache und weit­ver­brei­te­te Methode, um bei Linux Dateien nach be­stimm­ten Zei­chen­fol­gen zu durch­su­chen oder zu filtern. Der Linux-Befehl folgt dabei einer ein­heit­li­chen Syntax und er­leich­tert die Suche durch fest­ge­leg­te Parameter.

Was ist grep?

grep ist die Abkürzung für „global regular ex­pres­si­on print“. Da das Programm im es­sen­zi­el­len Paket von Ubuntu enthalten ist, muss es nicht extra in­stal­liert werden. grep-Befehle werden verwendet, um Muster und Zei­chen­fol­gen zu suchen. So ist es möglich, auch in großen Pro­to­koll­da­tei­en die gesuchten In­for­ma­tio­nen her­aus­zu­fil­tern. Wichtig ist, dass Sie grep nie für Ge­rä­te­da­tei­en ausführen, da dies zu Problemen führen kann.

Wie wird grep verwendet?

Die Grund­syn­tax von grep sieht aus wie folgt: „grep [Optionen] Suchstring [Datei]“ oder al­ter­na­tiv „grep [Optionen] [-e Muster | -f Datei] [Datei]“. Ein einfaches Beispiel für einen grep-Befehl in Linux wäre die Suche nach einem be­stimm­ten Begriff im Text einer Code- oder Log-Datei. Wollen Sie also den Begriff „test“ in einer Datei namens beispiel.txt suchen, geben Sie in grep folgendes ein: „grep "test" beispiel.txt“. Nun werden Ihnen die ent­spre­chen­den Zeilen in dieser Datei angezeigt.

Regular ex­pres­si­ons als Basis für grep

Die Basis dieses Vorgangs sind die so­ge­nann­ten „regular ex­pres­si­ons“ in Linux. Diese „regulären Ausdrücke“ gibt es in den Varianten basic und extended, wobei letztere für grep von Bedeutung ist. Durch die regular ex­pres­si­ons können mit grep einzelne Zeichen oder Zei­chen­fol­gen gesucht werden. Handelt es sich bei einem Zeichen um einen Buch­sta­ben oder eine Ziffer, kann dieses durch eine einfache Eingabe iden­ti­fi­ziert werden, auch wenn es Teil einer Zei­chen­fol­ge ist. Beim Beispiel der Ziffer „2“ würde der Befehl nicht nur die einzelne „2“ finden, sondern auch Zei­chen­ket­ten, wie „1234“, „y2k“ oder „Nummer2“.

Es gibt Zeichen in grep, die eine Funktion bei der Suche erfüllen. So findet zum Beispiel das Dol­lar­zei­chen „$“ das Ende einer Zeile. Jene Zeichen können durch einen be­stimm­ten Befehl in grep gesondert gesucht werden. Hierzu wird dem Zeichen ein Rück­strich vor­an­ge­stellt. Wenn Sie also einen Punkt „.“ als Satz­zei­chen in einer Datei suchen, gelingt Ihnen das mit der Kom­bi­na­ti­on „\.“.

Listen bei grep

Auch Listen ver­schie­de­ner Zeichen, so­ge­nann­te „bracket ex­pres­si­ons“, können mit grep gefiltert werden. Für die Liste der Zeichen, die in der Such­an­fra­ge be­rück­sich­tigt werden sollen, verwenden Sie zwei eckige Klammern „[]“. Möchten Sie zum Beispiel nach sämt­li­chen Buch­sta­ben „e“ in der Groß- oder Klein­schreib­wei­se suchen, so verwenden Sie die Such­op­ti­on „[Ee]“. Für sich genommen, findet diese Eingabe sämtliche Buch­sta­ben „e“. Kom­bi­nie­ren Sie sie, können Sie hingegen auch ganze Worte oder Text­frag­men­te mit einem großen oder kleinen „e“ her­aus­fil­tern. Geben Sie in grep zum Beispiel „[Ee]nde“ ein, findet grep nicht nur den Begriff „Ende“, sondern auch Text­stü­cke, mit kleinem „e“, wie „beenden“.

Außerdem bietet Ihnen grep die Mög­lich­keit, bestimmte Ziffern von einer Liste bei einer Suche aus­zu­schlie­ßen und lediglich jene zu suchen, die nicht im Vorfeld aus­ge­schlos­sen wurden. Dazu wird ein „^“ vor­an­ge­stellt. „^Ee“ be­rück­sich­tigt also bei­spiels­wei­se alle Zeichen außer „E“ und „e“.

Mit Hilfe einiger vor­de­fi­nier­ter Listen spart grep in Linux Ihnen Ar­beits­schrit­te. Jede dieser vor­de­fi­nier­ten Listen wird in zu­sätz­li­che eckige Klammern ein­ge­fasst, also [[:bei­spiel­lis­te:]]. Die vor­de­fi­nier­ten Listen sind:

  • [:alnum:]: Be­inhal­tet alle Ziffern [:digit:] und Buch­sta­ben [:alpha:]
  • [:alpha:]: Be­inhal­tet alle Buch­sta­ben [:upper:] und [:lower:]
  • [:blank:]: Be­inhal­tet alle Leer­zei­chen durch Leertaste oder Tabulator
  • [:cntrl:]: Be­inhal­tet alle Steu­er­zei­chen
  • [:digit:]: Be­inhal­tet alle Ziffern von 0 bis 9
  • [:graph:]: Be­inhal­tet alle gra­fi­schen Zeichen [:alnum:] und [:punct:]
  • [:lower:]: Be­inhal­tet alle Klein­buch­sta­ben
  • [:print:]: Be­inhal­tet alle druck­ba­ren Zeichen [:alnum:], [:punct:] und [:space:]
  • [:punct:]: Be­inhal­tet alle Satz- und Son­der­zei­chen
  • [:space:]: Be­inhal­tet alle Zeichen, die einen Leerraum er­schaf­fen, wie Leer­zei­chen oder Zei­len­vor­schub
  • [:upper:]: Be­inhal­tet alle Groß­buch­sta­ben

Beispiele für nützliche grep-Befehle

Richtig an­ge­wen­det, helfen grep-Befehle Ihnen beim Durch­su­chen großer Dateien. Es gibt zahl­rei­che Parameter, mit denen Sie Ihre Suche so spe­zi­fi­zie­ren, dass grep wirklich aus­schließ­lich jene Zeichen oder Zeilen iden­ti­fi­ziert, die Sie benötigen. Diese werden mit einem „-“ markiert. Hier finden Sie einige nützliche Beispiele:

  • -c: Mit -c oder -count sucht grep nicht nach dem vor­ge­ge­be­nen Such­mus­ter, sondern gibt statt­des­sen an, in wie vielen Zeilen das Such­mus­ter gefunden wurde. Der grep-Befehl „grep -c "test" beispiel.txt“ zählt also, in wie vielen Zeilen „test“ vorkommt und zeigt Ihnen die Anzahl an.
  • -l: Möchten Sie wissen, in welcher Datei ein be­stimm­ter Such­be­griff gefunden wurde, nutzen Sie die Option „-l“ (kleines „L“). Mit dem grep-Befehl „grep -l "test" \*.txt“ erfragen Sie so sämtliche Dateien, die den Begriff oder die Zei­chen­fol­ge „test“ enthalten.
  • -i: Mit -i igno­rie­ren Sie bei Ihrer Suche die Groß- und Klein­schrei­bung. „grep -i "test" beispiel.txt“ gibt also alle Zeilen aus, die sowohl „test“ als auch „Test“ enthalten.

grep gibt es in drei weiteren Varianten

Neben der regulären Version von grep gibt es drei weitere Varianten. egrep ent­spricht wei­test­ge­hend grep -E und behandelt an­ge­ge­be­ne Muster als er­wei­ter­te regular ex­pres­si­ons. fgrep ent­spricht größ­ten­teils grep -F und sucht speziell nach Muster-Pa­ra­me­tern. Zeichen, die bei anderen Befehlen als Teil einer regular ex­pres­si­on gelesen werden, in­ter­pre­tiert fgrep in ihrer wört­li­chen Bedeutung ohne die zu­sätz­li­che Funktion. Beispiele dafür sind unter anderem „$“, „*“ oder „\“. rgrep ent­spricht grep -r und durch­sucht alle Ver­zeich­nis­se rekursiv, be­rück­sich­tigt also auch die Un­ter­ver­zeich­nis­se.

Zum Hauptmenü