Blitzschnelles rekursives Suchwerkzeug, das die Benutzerfreundlichkeit von ag mit der Geschwindigkeit von grep kombiniert. Beachtet standardmaessig .gitignore-Regeln.
| Plattform | Befehl |
|---|
| macOS (Homebrew) | brew install ripgrep |
| Ubuntu/Debian | sudo apt install ripgrep |
| Arch Linux | sudo pacman -S ripgrep |
| Fedora | sudo dnf install ripgrep |
| Windows (Scoop) | scoop install ripgrep |
| Windows (Choco) | choco install ripgrep |
| Cargo (Rust) | cargo install ripgrep |
| Ueberpruefen | rg --version |
| Befehl | Beschreibung |
|---|
rg "pattern" | Rekursiv im aktuellen Verzeichnis suchen |
rg "pattern" path/ | In bestimmtem Verzeichnis suchen |
rg "pattern" file.txt | In bestimmter Datei suchen |
rg -i "pattern" | Gross-/Kleinschreibung ignorieren |
rg -S "pattern" | Intelligente Gross-/Kleinschreibung (ignoriert bei Kleinbuchstaben) |
rg -w "word" | Nur ganze Woerter abgleichen |
rg -c "pattern" | Treffer pro Datei zaehlen |
rg -l "pattern" | Nur Dateien mit Treffern auflisten |
rg --files-without-match "pattern" | Dateien ohne Treffer auflisten |
rg -n "pattern" | Zeilennummern anzeigen (Standard) |
rg -N "pattern" | Zeilennummern ausblenden |
rg --column "pattern" | Spaltennummern der Treffer anzeigen |
rg -F "literal.string" | Feste Zeichenkettensuche (kein Regex) |
| Befehl | Beschreibung |
|---|
rg "foo|bar" | foo ODER bar abgleichen |
rg "^import" | Zeilen, die mit “import” beginnen |
rg ";\s*$" | Zeilen, die mit Semikolon enden |
rg "\d{3}-\d{4}" | Telefonnummernmuster abgleichen |
rg "\bfunction\b" | Wortgrenzen-Abgleich |
rg "fn\s+\w+" | Funktionsdefinitionen abgleichen |
rg -P "(?<=@)\w+" | PCRE2-Lookbehind (Domain extrahieren) |
rg -P "\b\w{20,}\b" | Woerter mit 20+ Zeichen |
rg -U "struct \{[\s\S]*?\}" | Mehrzeiliger Abgleich |
rg -e "pat1" -e "pat2" | Mehrere Muster (ODER-Logik) |
rg -f patterns.txt | Muster aus Datei lesen |
| Befehl | Beschreibung |
|---|
rg -A 3 "pattern" | 3 Zeilen nach dem Treffer anzeigen |
rg -B 2 "pattern" | 2 Zeilen vor dem Treffer anzeigen |
rg -C 5 "pattern" | 5 Zeilen Kontext anzeigen (vorher + nachher) |
rg -o "pattern" | Nur den gefundenen Text ausgeben |
rg --json "pattern" | Ausgabe im JSON-Format |
rg --vimgrep "pattern" | Ausgabe im Vim-kompatiblen Format |
rg --color never "pattern" | Farbausgabe deaktivieren |
rg --color always "pattern" | less -R | Farbe fuer Piping erzwingen |
rg --heading "pattern" | Ergebnisse nach Datei gruppieren (Standard im Terminal) |
rg --no-heading "pattern" | Einzeilige Ergebnisse ohne Gruppierung |
rg --trim "pattern" | Leerzeichen aus Ergebnissen entfernen |
rg -m 5 "pattern" | Auf 5 Treffer pro Datei begrenzen |
rg --max-count 1 "pattern" | Nur erster Treffer pro Datei |
rg --stats "pattern" | Suchstatistiken am Ende anzeigen |
rg --passthru "pattern" | Alle Zeilen anzeigen, Treffer hervorheben |
| Befehl | Beschreibung |
|---|
rg -t py "pattern" | Nur in Python-Dateien suchen |
rg -t js -t ts "pattern" | In JavaScript- und TypeScript-Dateien suchen |
rg -T html "pattern" | HTML-Dateien ausschliessen |
rg -g "*.md" "pattern" | Glob-Filter — nur Markdown-Dateien |
rg -g "!*.min.js" "pattern" | Glob-Ausschluss — minimiertes JS ueberspringen |
rg -g "src/**/*.ts" "pattern" | Glob mit Verzeichnispfad |
rg -g "!test/" "pattern" | Test-Verzeichnis ausschliessen |
rg --type-list | Alle bekannten Dateitypen anzeigen |
rg --type-add 'web:*.{html,css,js}' | Benutzerdefinierten Dateityp definieren |
| Befehl | Beschreibung |
|---|
rg --hidden "pattern" | Versteckte Dateien/Verzeichnisse einschliessen |
rg --no-ignore "pattern" | .gitignore-Regeln nicht beachten |
rg --no-ignore-vcs "pattern" | Nur VCS-Ignore-Dateien ueberspringen |
rg -u "pattern" | Uneingeschraenkt (—no-ignore) |
rg -uu "pattern" | Staerker uneingeschraenkt (—no-ignore —hidden) |
rg -uuu "pattern" | Maximal uneingeschraenkt (+ Binaerdateien) |
rg --max-depth 2 "pattern" | Verzeichnistiefe begrenzen |
rg -L "pattern" | Symbolischen Links folgen |
rg --max-filesize 1M "pattern" | Dateien groesser als 1MB ueberspringen |
rg --sort path "pattern" | Ergebnisse nach Dateipfad sortieren |
rg --sortr modified "pattern" | Nach Aenderungszeit sortieren (neueste zuerst) |
rg --files | Alle Dateien auflisten, die rg durchsuchen wuerde |
rg --files -t rust | Alle Rust-Dateien auflisten |
| Befehl | Beschreibung |
|---|
rg "old" -r "new" | Ersetzungen vorschauen (nur stdout) |
rg "(\w+)@(\w+)" -r '$1 at $2' | Regex-Erfassungsgruppen-Ersetzung |
rg "TODO" -r "DONE" --passthru | Vollstaendige Datei mit Ersetzungen anzeigen |
rg -l "oldFunc" | xargs sed -i 's/oldFunc/newFunc/g' | Tatsaechlich in Dateien ersetzen (mit sed) |
| Datei/Variable | Beschreibung |
|---|
~/.ripgreprc | Standard-Konfigurationsdatei |
RIPGREP_CONFIG_PATH | Benutzerdefinierter Konfigurationsdateipfad |
--no-config | Konfigurationsdatei ignorieren |
--smart-case
--line-number
--heading
--max-columns=200
--max-columns-preview
--glob=!node_modules/
--glob=!.git/
--glob=!dist/
--glob=!vendor/
--colors=match:fg:yellow
--colors=match:style:bold
--colors=path:fg:green
# Alle TODOs mit Kontext
rg "TODO|FIXME|HACK|XXX" -t py -C 2
# TODOs pro Datei zaehlen
rg -c "TODO" --sort path
# Aenderungen vorschauen
rg "oldFunction" -r "newFunction" -t js
# Aenderungen anwenden (Pipe zu sed)
rg -l "oldFunction" -t js | xargs sed -i 's/oldFunction/newFunction/g'
# Dateien finden, die ein Muster nicht enthalten
rg --files-without-match "Copyright" -t py
# Unbenutzte Exports finden
rg "export " -t ts -l | while read f; do
rg -l "$(basename $f .ts)" -g "!$f" || echo "Unused: $f"
done
# Komprimierte Logs durchsuchen
rg -z "ERROR" /var/log/*.gz
# Zeitstempel aus Fehlern extrahieren
rg -o "\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.*ERROR.*" app.log
# Fehler pro Tag zaehlen
rg -o "^\d{4}-\d{2}-\d{2}" --no-filename error.log | sort | uniq -c
# Interaktive Dateiauswahl mit fzf
rg --files | fzf --preview 'rg --color=always "pattern" {}'
# Ergebnisse an vim weiterleiten
rg --vimgrep "pattern" | vim -q /dev/stdin
# JSON-Pipeline mit jq
rg --json "pattern" | jq 'select(.type == "match") | .data.lines.text'
| Werkzeug | Geschwindigkeit | .gitignore | Unicode | Regex |
|---|
| ripgrep | Am schnellsten | Ja | Vollstaendig | Rust regex + PCRE2 |
| grep -r | Langsam | Nein | Teilweise | POSIX/erweitert |
| ag (Silver Searcher) | Schnell | Ja | Vollstaendig | PCRE |
| ack | Mittel | Nein | Vollstaendig | Perl |
- Verwende Dateityp-Filter (
-t, -T) anstelle von Globs wenn moeglich — sie sind schneller und decken alle Erweiterungen ab
- Erstelle eine
.ripgreprc, um Smart-Case, Heading und Verzeichnisausschluesse als Standard zu setzen
- Verwende
.ignore-Dateien in Projektwurzeln, um node_modules, dist, build auszuschliessen, ohne Git zu beeinflussen
- Bevorzuge
-F fuer literale Zeichenketten, die Regex-Metazeichen enthalten, um Escaping zu vermeiden
- Verwende
--stats, um die Suchleistung bei grossen Codebasen zu verstehen
- Kombiniere mit
fzf oder xargs fuer interaktive Auswahl und Batch-Operationen
- Verwende
--files zuerst, um zu ueberpruefen, welche Dateien durchsucht werden, bevor du die eigentliche Suche ausfuehrst
- Verwende den Mehrzeilenmodus (
-U) sparsam — er ist langsamer; bevorzuge bei Moeglichkeit mehrere Suchen
| Problem | Loesung |
|---|
| Fehlende Ergebnisse im Git-Repo | Dateien koennten in .gitignore sein — verwende rg -u oder --no-ignore |
| Binaerdatei uebersprungen | Verwende rg -uuu oder --text, um Binaerdateien einzuschliessen |
| Regex passt nicht | Versuche -P fuer die PCRE2-Engine oder -F fuer literale Zeichenketten |
Keine Ergebnisse mit \b | Standard-Engine unterstuetzt es moeglicherweise nicht — versuche rg -P "\bword\b" |
| Farben fehlen bei Pipe | Verwende --color always beim Piping zu less oder anderen Tools |
| Konfiguration laedt nicht | Pruefe RIPGREP_CONFIG_PATH oder verwende --no-config zum Debuggen |
| Symlinks werden nicht verfolgt | Fuege das -L oder --follow-Flag hinzu |
| Ergebnisse zu verrauscht | Verwende -g '!pattern'-Globs oder -t type, um den Bereich einzuschraenken |
| Suche zu langsam | Verwende --max-filesize, reduziere die Tiefe mit --max-depth oder filtere Typen |