Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

4.6 Nützliche Befehle für effizientes Arbeiten

Humboldt-Universität zu Berlin, Institut für Bibliotheks- und Informationswissenschaft

In diesem Kapitel lernen Sie fortgeschrittene Techniken kennen, die Ihre Arbeit im Terminal deutlich effizienter machen: Pipes, Ausgabeumleitungen, Wildcards und Textsuche.

Pipes: Programme verbinden

Mit Pipes (|) leiten Sie die Ausgabe eines Befehls als Eingabe an einen anderen weiter:

$ befehl1 | befehl2

Beispiel: Sortierte Dateiliste

$ ls -1
zebra.txt
alpha.txt
beta.txt
$ ls -1 | sort
alpha.txt
beta.txt
zebra.txt

Beispiel: Anzahl der Dateien zählen

$ ls | wc -l
42

wc -l (word count, lines) zählt die Zeilen der Eingabe.

Beispiel: Die größten Dateien finden

$ ls -lh | sort -k 5 -h | tail -n 5

Mehrere Pipes kombinieren

$ cat datei.txt | grep "Fehler" | sort | uniq

Ausgabeumleitungen

Ausgabe in Datei schreiben (>)

$ ls > dateiliste.txt

Statt auf dem Bildschirm wird die Ausgabe in dateiliste.txt geschrieben.

$ echo "Hallo Welt" > hallo.txt
$ cat hallo.txt
Hallo Welt

An Datei anhängen (>>)

$ echo "Zeile 1" > datei.txt
$ echo "Zeile 2" >> datei.txt
$ cat datei.txt
Zeile 1
Zeile 2

Eingabe aus Datei lesen (<)

$ sort < unsortiert.txt

Liest unsortiert.txt und sortiert den Inhalt.

Ausgabe und Fehler trennen

$ befehl > ausgabe.txt 2> fehler.txt

Beides in eine Datei:

$ befehl > alles.txt 2>&1

Oder kürzer (seit bash 4.0):

$ befehl &> alles.txt

Ausgabe verwerfen

$ befehl > /dev/null

/dev/null ist ein “schwarzes Loch” – alles, was dorthin geschrieben wird, verschwindet.

Wildcards (Platzhalter)

Wildcards ermöglichen es, mehrere Dateien auf einmal anzusprechen:

Stern (*)

Steht für beliebig viele Zeichen (auch null):

$ ls *.py
main.py  test.py  utils.py
$ cp *.txt backup/

Kopiert alle .txt-Dateien nach backup/.

$ rm test*

Löscht alle Dateien, die mit “test” beginnen.

Fragezeichen (?)

Steht für genau ein Zeichen:

$ ls datei?.txt
datei1.txt  datei2.txt  datei3.txt
$ ls datei??.txt
datei01.txt  datei10.txt  datei99.txt

Eckige Klammern ([])

Steht für ein Zeichen aus der angegebenen Menge:

$ ls datei[123].txt
datei1.txt  datei2.txt  datei3.txt
$ ls datei[0-9].txt
datei0.txt  datei1.txt  ...  datei9.txt
$ ls [A-Z]*.py
Main.py  Utils.py

Geschweifte Klammern ({})

Expandiert zu mehreren Varianten:

$ echo {apple,banana,cherry}.txt
apple.txt banana.txt cherry.txt
$ mkdir -p projekt/{src,tests,docs}

Erstellt drei Verzeichnisse.

$ cp script.py{,.backup}

Äquivalent zu: cp script.py script.py.backup

Textsuche mit grep

Mit grep suchen Sie nach Textmustern in Dateien:

Grundlegende Suche

$ grep "import" main.py
import sys
import csv

Zeigt alle Zeilen, die “import” enthalten.

In mehreren Dateien suchen

$ grep "def" *.py
main.py:def verarbeite(daten):
utils.py:def lese_csv(dateiname):
utils.py:def schreibe_csv(dateiname, daten):

Groß-/Kleinschreibung ignorieren

$ grep -i "fehler" logfile.txt

Findet “Fehler”, “fehler”, “FEHLER”, etc.

Zeilennummern anzeigen

$ grep -n "TODO" *.py
main.py:42:# TODO: Fehlerbehandlung verbessern
utils.py:15:# TODO: Dokumentation schreiben

Rekursiv in Verzeichnissen suchen

$ grep -r "class" src/

Sucht in allen Dateien im src/-Verzeichnis.

Nur Dateinamen anzeigen

$ grep -l "import pandas" *.py
data_analysis.py
processing.py

Invertierte Suche

$ grep -v "^#" config.py

Zeigt alle Zeilen, die nicht mit # beginnen (z.B. um Kommentare auszublenden).

Mit regulären Ausdrücken

$ grep "^def " *.py

Findet Zeilen, die mit "def " beginnen (Funktionsdefinitionen).

$ grep "[0-9]{3,}" datei.txt

Findet Zahlen mit mindestens 3 Ziffern.

Praktische Kombinationen

Python-Funktionen in einem Projekt finden

$ grep -rn "^def " src/ | head -10

Zeigt die ersten 10 Funktionsdefinitionen mit Dateiname und Zeilennummer.

Log-Dateien nach Fehlern durchsuchen

$ grep -i "error" logfile.txt | tail -20

Zeigt die letzten 20 Fehler.

Häufigste Wörter in einer Datei

$ cat datei.txt | tr ' ' '\n' | sort | uniq -c | sort -nr | head -10

Alle Python-Dateien finden und Zeilen zählen

$ find . -name "*.py" -exec wc -l {} + | sort -n

Weitere nützliche Befehle

wc – Word Count

$ wc datei.txt
  42  315 2048 datei.txt

Zeigt: Zeilen, Wörter, Bytes.

Nur Zeilen:

$ wc -l datei.txt

sort – Sortieren

$ sort datei.txt
$ sort -r datei.txt      # Rückwärts
$ sort -n zahlen.txt     # Numerisch

uniq – Duplikate entfernen

$ sort datei.txt | uniq
$ sort datei.txt | uniq -c    # Mit Anzahl

Wichtig: uniq funktioniert nur auf sortierten Daten!

cut – Spalten extrahieren

$ cut -d',' -f1,3 data.csv

Extrahiert Spalten 1 und 3 aus einer CSV-Datei (Trennzeichen: Komma).

tr – Zeichen ersetzen

$ echo "HALLO" | tr 'A-Z' 'a-z'
hallo
$ cat datei.txt | tr -d '\r'

Entfernt Carriage Returns (Windows-Zeilenenden).

Zusammenfassung

TechnikSyntaxBeispiel
Pipecmd1 | cmd2ls | sort
Umleitung (schreiben)>echo "text" > datei.txt
Umleitung (anhängen)>>echo "mehr" >> datei.txt
Eingabe aus Datei<sort < datei.txt
Wildcards*, ?, []ls *.py
Textsuchegrepgrep "import" *.py
Sortierensortsort datei.txt
Duplikate entfernenuniqsort | uniq
Zeilen/Wörter zählenwcwc -l datei.txt

Diese Werkzeuge machen die Unix-Kommandozeile so mächtig. Mit etwas Übung können Sie komplexe Datenverarbeitungen in einer einzigen Zeile durchführen!