Linux grep Befehl
grep ist eine einfache und weitverbreitete Methode, um bei Linux Dateien nach bestimmten Zeichenfolgen zu durchsuchen oder zu filtern. Der Linux-Befehl folgt dabei einer einheitlichen Syntax und erleichtert die Suche durch festgelegte Parameter.
Was ist grep?
grep ist die Abkürzung für „global regular expression print“. Da das Programm im essenziellen Paket von Ubuntu enthalten ist, muss es nicht extra installiert werden. grep-Befehle werden verwendet, um Muster und Zeichenfolgen zu suchen. So ist es möglich, auch in großen Protokolldateien die gesuchten Informationen herauszufiltern. Wichtig ist, dass Sie grep nie für Gerätedateien ausführen, da dies zu Problemen führen kann.
Wie wird grep verwendet?
Die Grundsyntax von grep sieht aus wie folgt: „grep [Optionen] Suchstring [Datei]“ oder alternativ „grep [Optionen] [-e Muster | -f Datei] [Datei]“. Ein einfaches Beispiel für einen grep-Befehl in Linux wäre die Suche nach einem bestimmten 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 entsprechenden Zeilen in dieser Datei angezeigt.
Regular expressions als Basis für grep
Die Basis dieses Vorgangs sind die sogenannten „regular expressions“ 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 expressions können mit grep einzelne Zeichen oder Zeichenfolgen gesucht werden. Handelt es sich bei einem Zeichen um einen Buchstaben oder eine Ziffer, kann dieses durch eine einfache Eingabe identifiziert werden, auch wenn es Teil einer Zeichenfolge ist. Beim Beispiel der Ziffer „2“ würde der Befehl nicht nur die einzelne „2“ finden, sondern auch Zeichenketten, wie „1234“, „y2k“ oder „Nummer2“.
Es gibt Zeichen in grep, die eine Funktion bei der Suche erfüllen. So findet zum Beispiel das Dollarzeichen „$“ das Ende einer Zeile. Jene Zeichen können durch einen bestimmten Befehl in grep gesondert gesucht werden. Hierzu wird dem Zeichen ein Rückstrich vorangestellt. Wenn Sie also einen Punkt „.“ als Satzzeichen in einer Datei suchen, gelingt Ihnen das mit der Kombination „\.“.
Listen bei grep
Auch Listen verschiedener Zeichen, sogenannte „bracket expressions“, können mit grep gefiltert werden. Für die Liste der Zeichen, die in der Suchanfrage berücksichtigt werden sollen, verwenden Sie zwei eckige Klammern „[]“. Möchten Sie zum Beispiel nach sämtlichen Buchstaben „e“ in der Groß- oder Kleinschreibweise suchen, so verwenden Sie die Suchoption „[Ee]“. Für sich genommen, findet diese Eingabe sämtliche Buchstaben „e“. Kombinieren Sie sie, können Sie hingegen auch ganze Worte oder Textfragmente mit einem großen oder kleinen „e“ herausfiltern. Geben Sie in grep zum Beispiel „[Ee]nde“ ein, findet grep nicht nur den Begriff „Ende“, sondern auch Textstücke, mit kleinem „e“, wie „beenden“.
Außerdem bietet Ihnen grep die Möglichkeit, bestimmte Ziffern von einer Liste bei einer Suche auszuschließen und lediglich jene zu suchen, die nicht im Vorfeld ausgeschlossen wurden. Dazu wird ein „^“ vorangestellt. „^Ee“ berücksichtigt also beispielsweise alle Zeichen außer „E“ und „e“.
Mit Hilfe einiger vordefinierter Listen spart grep in Linux Ihnen Arbeitsschritte. Jede dieser vordefinierten Listen wird in zusätzliche eckige Klammern eingefasst, also [[:beispielliste:]]. Die vordefinierten Listen sind:
- [:alnum:]: Beinhaltet alle Ziffern [:digit:] und Buchstaben [:alpha:]
- [:alpha:]: Beinhaltet alle Buchstaben [:upper:] und [:lower:]
- [:blank:]: Beinhaltet alle Leerzeichen durch Leertaste oder Tabulator
- [:cntrl:]: Beinhaltet alle Steuerzeichen
- [:digit:]: Beinhaltet alle Ziffern von 0 bis 9
- [:graph:]: Beinhaltet alle grafischen Zeichen [:alnum:] und [:punct:]
- [:lower:]: Beinhaltet alle Kleinbuchstaben
- [:print:]: Beinhaltet alle druckbaren Zeichen [:alnum:], [:punct:] und [:space:]
- [:punct:]: Beinhaltet alle Satz- und Sonderzeichen
- [:space:]: Beinhaltet alle Zeichen, die einen Leerraum erschaffen, wie Leerzeichen oder Zeilenvorschub
- [:upper:]: Beinhaltet alle Großbuchstaben
Beispiele für nützliche grep-Befehle
Richtig angewendet, helfen grep-Befehle Ihnen beim Durchsuchen großer Dateien. Es gibt zahlreiche Parameter, mit denen Sie Ihre Suche so spezifizieren, dass grep wirklich ausschließlich jene Zeichen oder Zeilen identifiziert, 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 vorgegebenen Suchmuster, sondern gibt stattdessen an, in wie vielen Zeilen das Suchmuster 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 bestimmter Suchbegriff 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 Zeichenfolge „test“ enthalten.
- -i: Mit -i ignorieren Sie bei Ihrer Suche die Groß- und Kleinschreibung. „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 entspricht weitestgehend grep -E und behandelt angegebene Muster als erweiterte regular expressions. fgrep entspricht größtenteils grep -F und sucht speziell nach Muster-Parametern. Zeichen, die bei anderen Befehlen als Teil einer regular expression gelesen werden, interpretiert fgrep in ihrer wörtlichen Bedeutung ohne die zusätzliche Funktion. Beispiele dafür sind unter anderem „$“, „*“ oder „\“. rgrep entspricht grep -r und durchsucht alle Verzeichnisse rekursiv, berücksichtigt also auch die Unterverzeichnisse.