Die Kommandozeile bleibt der schnellste Ort, um Code zu durchsuchen, zu filtern und zu bearbeiten. Die historischen Unix-Werkzeuge — grep, find, cat — stammen jedoch aus einer Zeit ohne .gitignore, ohne 400 MB große node_modules-Verzeichnisse und ohne farbige Ausgabe. Eine Generation von Nachfolgern hat sich in Webentwicklungsumgebungen durchgesetzt. Ein Überblick über die, die sich einen Platz im $PATH wirklich verdienen.
brew install oder ein apt-Paket genügt, und keines verlangt vorherige Konfiguration — sie sind ab dem ersten Befehl nützlich.Suchen und filtern
ripgrep — die Suche, die grep hätte sein sollen
rg durchsucht rekursiv einen regulären Ausdruck und berücksichtigt dabei automatisch die .gitignore, überspringt Binärdateien und färbt die Ausgabe ein. In Rust von Andrew Gallant geschrieben, dient es als Standard-Suchmaschine von Visual Studio Code — eine belastbare Referenz für den Einsatz im großen Maßstab.
# Einen Funktionsaufruf im gesamten Projekt suchen, ohne node_modules zu durchpflügen
rg "wp_enqueue_script" --type php
# Treffer-Dateien auflisten
rg -l "TODO" src/
# Regulärer Ausdruck mit Gruppe, Ersetzung nur angezeigt
rg "version: (d+.d+)" --replace 'v$1'Der Abstand zu grep -r liegt nicht nur in der reinen Geschwindigkeit, sondern in der Beachtung der .gitignore: In einem Monorepo verbringt grep Sekunden damit, vendor/ und node_modules/ zu durchlaufen, die rg standardmäßig ignoriert. Das offizielle Repository dokumentiert die Dateityp-Filter.
Was ripgrep bringt, ist kein Tippkomfort: Es ist die Geschwindigkeit, mit der man eine unbekannte Codebasis versteht.
fd — eine Datei finden, ohne die find-Syntax aufzusagen
find ist mächtig, seine Syntax unbarmherzig. fd von David Peter löst den Normalfall einfach: lesbare Syntax, farbige Ausgabe, Beachtung der .gitignore.
# Alle SCSS-Dateien
fd -e scss
# Übrig gebliebene .DS_Store finden und löschen
fd -H '^.DS_Store$' -X rm
# Ein bestimmtes Verzeichnis suchen
fd -t d migrationsfzf — der Fuzzy-Filter, der sich kombinieren lässt
fzf von Junegunn Choi ist ein interaktiver Fuzzy-Filter. Schon allein nützlich, entfaltet er seinen Wert erst in Kombination mit anderen Werkzeugen über Pipes: Verlaufssuche, Auswahl eines Git-Branchs, Öffnen von Dateien.
# Eine per Fuzzy-Suche gewählte Datei in $EDITOR öffnen
vim "$(fzf)"
# Git-Branch interaktiv wechseln
git checkout "$(git branch | fzf | tr -d ' *')"
# Kombiniert mit fd und bat als Vorschau
fd -t f | fzf --preview 'bat --color=always {}'Lesen und verstehen
bat — cat mit Syntaxhervorhebung
bat ersetzt cat beim Lesen durch Menschen: Syntaxhervorhebung, Zeilennummern, Git-Markierungen am Rand. Fürs Skripting bleibt cat vorzuziehen; beim Lesen einer Konfigurationsdatei ist der Unterschied deutlich.
bat wp-config.php
bat -r 40:80 functions.php # nur die Zeilen 40 bis 80eza — ein zeitgemäßes ls
Da exa nicht mehr gepflegt wird, hat die Community die Entwicklung unter dem Namen eza fortgeführt: Symbole, Farben nach Typ, Baumansicht, Git-Statusspalte.
eza -la --git --icons
eza --tree --level=2 src/jq — mit JSON arbeiten
Sobald eine API im Spiel ist, kommt man an jq kaum vorbei. Das Projekt wird inzwischen unter der Organisation jqlang gepflegt und hat wieder einen regelmäßigen Veröffentlichungsrhythmus.
# Beitragstitel aus der WordPress-REST-API extrahieren
curl -s https://beispiel.de/wp-json/wp/v2/posts | jq '.[].title.rendered'
# Filtern und umformen
curl -s https://beispiel.de/wp-json/wp/v2/posts
| jq '[.[] | {id, slug, titel: .title.rendered}]'gh — GitHub ohne das Terminal zu verlassen
Der offizielle GitHub-Client deckt den Großteil des Arbeitsablaufs ab: Pull Request anlegen, prüfen, CI-Läufe einsehen, Issues verwalten. Er erspart das ständige Hin und Her zwischen Editor und Browser.
gh pr create --fill
gh pr checks
gh issue list --label bugÜbersicht
| Werkzeug | Ersetzt | Entscheidender Nutzen |
|---|---|---|
rg | grep -r | Beachtung der .gitignore, Tempo im Monorepo |
fd | find | Lesbare Syntax für den Normalfall |
fzf | — | Interaktiver Fuzzy-Filter, über Pipes kombinierbar |
bat | cat (Lesen) | Syntaxhervorhebung und Git-Markierungen |
eza | ls | Baumansicht und Git-Statusspalte |
jq | — | JSON abfragen und umformen |
gh | GitHub-Weboberfläche | Review-Ablauf ohne Terminalwechsel |
Was bleibt
Keines dieser Werkzeuge bietet eine gänzlich neue Fähigkeit: Sie senken die Kosten von Vorgängen, die man dutzendfach am Tag ausführt. Genau das macht sie rentabel — und erklärt ihre Verbreitung in so weit genutzten Werkzeugketten wie der von Visual Studio Code.
Bliebe nur eines, wäre es ripgrep: Es ist die erste Binärdatei, die ich auf einer neuen Maschine installiere, noch vor meinem Editor. Die anderen verbessern den Komfort; dieses verändert mein Tempo beim Verstehen einer neuen Codebasis. — Simon Janvier
