Der grep-Befehl kann in Linux viel Zeit und Arbeit sparen, wenn man die „Stringsuche“ richtig einsetzt. Wie das geht, zeigen wir euch hier mit praktischen Beispielen und Tipps.

 
Linux Mint
Facts 

Was macht der grep-Befehl in Linux?

Der Linux-Befehl „grep“ ist eine Abkürzung für „global regular expression print“. Er sucht im Terminal also nach bestimmten Textstücken, die auf die angegebene „Regular Expression“ passen. Das heißt: Der Befehl durchsucht beispielsweise Dateien auf eurem Rechner, kann aber auch Befehlsausgaben im Terminal nach bestimmten Schlagworten filtern.

  • Syntax: grep [Option(en)] Suchstring [Datei(en)]

Shell-Paramter in eckigen Klammern sind optional und können auch weggelassen werden. Man nutzt sie um das Suchverhalten anzupassen und/oder die Suche auf bestimmte Dateien/Verzeichnisse einzugrenzen.

Dateien mit grep nach bestimmten Textinhalt durchsuchen

  • grep "Pilze" *.txt

Der Befehl listet im aktuellen Verzeichnis alle Zeilen aller TXT-Dateien auf, die den Textinhalt „Pilze“ enthalten. Gefundene  Zeilen werden inklusive des zugehörigen Dateinamens ausgegeben.

  • Unterordner werden NICHT einbezogen. Hierfür sieht der Befehl so aus: find -name "*.txt" -exec grep -H "Pilze" '{}' \; -print
  • Es wird zwischen Groß- und Kleinschreibung unterschieden. Der Befehl grep -i "Pilze" *.txt unterscheidet das nicht.

In unserem Beispiel findet grep im aktuellen Verzeichnis nur die Datei „Einkaufsliste.txt“, die in einer Zeile den Text „Pilze“ enthält:

Hier zeigt grep alle Dateien an, in denen der Text „Pilze“ vorkommt. Bild: GIGA
Hier zeigt grep alle Dateien an, in denen der Text „Pilze“ vorkommt. (Bildquelle: GIGA)

Alternativ könnt ihr auch nur bestimmte Dateien nach einem Textinhalt durchsuchen:

  • grep "Pilze" Einkaufsliste.txt MeinBuch.txt Wünsche.txt

Dieser Befehl durchsucht die drei Textdateien „Einkaufsliste.txt“, „MeinBuch.txt“ und „Wünsche.txt“ nach dem Textinhalt „Pilze“. Statt der konkreten Dateinamen könnt ihr auch ein bestimmtes Verzeichnis angeben, das durchsucht wird:

  • grep "Pilze" /home/Petra/Testordner

Dateien mit grep durchsuchen, die den Textinhalt NICHT enthalten

  • grep -v 'Pilze' *.txt

Der Befehl listet alle Zeilen aller TXT-Dateien im aktuellen Verzeichnis auf, die den Textinhalt „Pilze“ NICHT enthalten. In unserem Beispiel findet der grep-Befehl drei Dateien („Der Engel.txt“, „Einkaufsliste.txt“ und „Wer bin ich.txt“). Und listet alle Zeilen innerhalb dieser drei Dateien auf, die den Text „Pilze“ nicht enthalten – Leerzeilen inbegriffen.

„Grep -v“ zeigt alle Zeilen aller gefundenen Dateien an, die das Suchwort nicht enthalten. Bild: GIGA
„Grep -v“ zeigt alle Zeilen aller gefundenen Dateien an, die das Suchwort nicht enthalten. (Bildquelle: GIGA)

Mit grep nur die Trefferanzahl anzeigen lassen

  • grep -c "Pilze" *.txt

Der Befehl durchsucht alle TXT-Dateien im aktuellen Verzeichnis nach dem Text „Pilze“ und listet die Anzahl der Treffer pro gefundener TXT-Datei auf. In unserem Beispiel findet grep drei TXT-Dateien, aber den Text „Pilze“ nur einmal in der Datei „Einkaufsliste.txt“:

„Grep -c“ zeigt nur die Anzahl der Treffer an. Bild: GIGA
„Grep -c“ zeigt nur die Anzahl der Treffer an. (Bildquelle: GIGA)

Zeilennummer der gefundenen Textstelle mit ausgeben

  • grep -n "Pilze" *.txt

Besonders für Programmierer ist die Option -n sinnvoll: Der Befehl gibt zusätzlich die Zeilennummer an, wo der gesuchte Textinhalt in welcher Datei gefunden wurde. In unserem Beispiel kommt der Text „Pilze“ in der Datei „Einkaufsliste.txt“ in der 2. Zeile vor:

„Grep -n“ zeigt auch die Zeilennummer der gefundenen Textstelle an. Bild: GIGA
„Grep -n“ zeigt auch die Zeilennummer der gefundenen Textstelle an. (Bildquelle: GIGA)

Mit grep nur ganze Wörter finden wie „ein“, aber nicht „Stein“

  • grep -w "ein" *.txt

Der Befehl sucht nach Zeilen in TXT-Dateien, die nur das ganze Wort „ein“ enthalten. Wörter wie „Stein“ oder „kein“ werden also ausgeschlossen. Bedenkt, dass auch zwischen Groß- und Kleinschreibung unterschieden wird. Wer das nicht möchte, fügt noch die Option -i mit in den befehl ein. In unserem Beispiel wird „ein“ nur in der Datei „Der Engel.txt“ gefunden. Das Wort „Stein“ in der Datei „Einkaufsliste.txt“ wird nicht hervorgehoben:

„Grep -w“ sucht hier nur nach ganzen Wörtern. Bild: GIGA
„Grep -w“ sucht hier nur nach ganzen Wörtern. (Bildquelle: GIGA)

Terminal-Befehlsausgaben mit grep filtern

Angenommen ihr möchtet den Prozess „audacity“ beenden, weil er Linux verlangsamt. Das funktioniert zuverlässig mit dem Befehl „kill -9“ im Terminal. Allerdings benötigt der Befehl die zugehörige PID (Prozess-ID), um ihn zu beenden. Der Befehl „ps -e“ listet alle laufenden Prozesse auf. Die Liste ist aber oft zu lang. Wenn ihr schnell die zugehörige PID haben möchtet, kombiniert ihr den Befehl mit grep wie folgt:

  • ps -e | grep audacity

Das Terminal zeigt euch nun nur die Prozess-ID(s) an, in denen „audacity“ vorkommt.

Hier filtert „grep“ die Befehlsausgabe nach dem gewünschten Text. Bild: GIGA
Hier filtert „grep“ die Befehlsausgabe nach dem gewünschten Text. (Bildquelle: GIGA)

Du willst keine News rund um Technik, Games und Popkultur mehr verpassen? Keine aktuellen Tests und Guides? Dann folge uns auf Facebook (GIGA Tech, GIGA Games) oder Twitter (GIGA Tech, GIGA Games).