Direkt zum Hauptinhalt springen
eLearner.app
Modul 3 · Lektion 2 von 27/11 im Kurs~15 min
Lektionen des Moduls (2/2)

Pipelines und Filter (grep und |)

Eine der leistungsstärksten Funktionen der Linux-Kommandozeile ist die Möglichkeit, verschiedene Befehle so zu verbinden, dass die Ausgabe des einen zur Eingabe des nächsten wird. Diese Technik wird durch Pipelines (Verkettungen) realisiert und durch den Filterbefehl grep unterstützt.


Der Textfilter: grep

Der Befehl grep (Global Regular Expression Print) sucht nach einem bestimmten Text in einer oder mehreren Dateien und gibt die entsprechenden Zeilen auf dem Bildschirm aus:

Bash
grep "parola" [nome_file]

Nützliche Optionen für grep

  • grep -i "errore" server.log : Führt eine Suche durch, bei der Groß- und Kleinschreibung ignoriert wird (findet sowohl "Errore" als auch "ERROR").
  • grep -n "connessione" server.log : Zeigt auch die entsprechende Zeilennummer in der Datei an.
  • grep -v "INFO" server.log : Invertiert die Suche und zeigt nur die Zeilen an, die das angegebene Wort nicht enthalten.

Befehle verketten: Die Pipeline |

Der Pipeline-Operator wird durch den vertikalen Strich | dargestellt. Er ermöglicht es, die Standardausgabe des linken Befehls direkt an die Standardeingabe des rechten Befehls zu senden:

Bash
[comando1] | [comando2]

Wenn beispielsweise eine Protokolldatei (Log) riesig ist und du nach einem Wort suchen möchtest, ohne sie ganz zu öffnen, kannst du cat und grep kombinieren:

Bash
cat logs/server.log | grep ERROR

Dieser Befehl liest die gesamte Datei server.log mit cat aus, gibt sie aber nicht auf dem Bildschirm aus, sondern übergibt sie an grep, welches nur die Zeilen herausfiltert und anzeigt, die das Wort "ERROR" enthalten.


Anwendungsbeispiele und häufige Fehler

Wenn du eine Suche nach einem Wort in Kleinbuchstaben (z. B. "post") in einer Datei durchführst, die nur Großbuchstaben enthält (z. B. "POST"), gibt grep nichts zurück:

Bash
grep "post" logs/access.log
# Output: (kein Ergebnis, die Suche unterscheidet standardmäßig zwischen Groß- und Kleinschreibung)

Um die Zeile unabhängig von ihrer Schreibweise zu finden, verwende das Flag -i:

Bash
grep -i "post" logs/access.log
# Output:
# 127.0.0.1 - - [22/May/2026:10:10:00 +0000] "POST /login HTTP/1.1" 401 234

Wenn die angegebene Datei nicht existiert, gibt grep einen Fehler zurück:

Bash
grep "ERROR" file_inesistente.log
# Output:
# grep: file_inesistente.log: No such file or directory

Probier es aus

Ejercicio 1: Cerca errori nei log

Übung#linux.m3.l2.e1
Versuche: 0Wird geladen…

Filtere die Datei 'logs/server.log', um nur die Zeilen zu extrahieren und anzuzeigen, die das Wort 'ERROR' (in Großbuchstaben) enthalten.

Editor wird geladen…
Hinweis anzeigen

Verwende den Befehl grep gefolgt von dem gesuchten Wort und dem Dateipfad.

Lösung nach 3 Versuchen verfügbar

Ejercicio 2: Pipeline e filtri

Übung#linux.m3.l2.e2
Versuche: 0Wird geladen…

Verwende den Befehl cat, um die Datei 'logs/server.log' zu lesen, und leite deren Ausgabe über eine Pipeline (|) an den Befehl grep weiter, um nur die Zeilen zu filtern und auszugeben, die das Wort 'WARNING' enthalten.

Editor wird geladen…
Hinweis anzeigen

Verbinde cat logs/server.log mit grep WARNING über das Pipe-Zeichen '|'.

Lösung nach 3 Versuchen verfügbar

Ejercicio 3: Ricerca case-insensitive

Übung#linux.m3.l2.e3
Versuche: 0Wird geladen…

Suche nach allen Zeilen, die das Wort 'post' (sowohl in Groß- als auch in Kleinschreibung) enthalten, in der Datei 'logs/access.log' unter Verwendung der entsprechenden Option von grep.

Editor wird geladen…
Hinweis anzeigen

Verwende grep mit der Option -i, um die Groß- und Kleinschreibung zu ignorieren.

Lösung nach 3 Versuchen verfügbar