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:
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:
[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:
cat logs/server.log | grep ERRORDieser 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:
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:
grep -i "post" logs/access.log
# Output:
# 127.0.0.1 - - [22/May/2026:10:10:00 +0000] "POST /login HTTP/1.1" 401 234Wenn die angegebene Datei nicht existiert, gibt grep einen Fehler zurück:
grep "ERROR" file_inesistente.log
# Output:
# grep: file_inesistente.log: No such file or directoryProbier es aus
Ejercicio 1: Cerca errori nei log
Filtere die Datei 'logs/server.log', um nur die Zeilen zu extrahieren und anzuzeigen, die das Wort 'ERROR' (in Großbuchstaben) enthalten.
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
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.
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
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.
Hinweis anzeigen
Verwende grep mit der Option -i, um die Groß- und Kleinschreibung zu ignorieren.
Lösung nach 3 Versuchen verfügbar