Zum Inhalt springen

ripgrep (rg) Befehle

Blitzschnelles rekursives Suchwerkzeug, das die Benutzerfreundlichkeit von ag mit der Geschwindigkeit von grep kombiniert. Beachtet standardmaessig .gitignore-Regeln.

PlattformBefehl
macOS (Homebrew)brew install ripgrep
Ubuntu/Debiansudo apt install ripgrep
Arch Linuxsudo pacman -S ripgrep
Fedorasudo dnf install ripgrep
Windows (Scoop)scoop install ripgrep
Windows (Choco)choco install ripgrep
Cargo (Rust)cargo install ripgrep
Ueberpruefenrg --version
BefehlBeschreibung
rg "pattern"Rekursiv im aktuellen Verzeichnis suchen
rg "pattern" path/In bestimmtem Verzeichnis suchen
rg "pattern" file.txtIn 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)
BefehlBeschreibung
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.txtMuster aus Datei lesen
BefehlBeschreibung
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 -RFarbe 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
BefehlBeschreibung
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-listAlle bekannten Dateitypen anzeigen
rg --type-add 'web:*.{html,css,js}'Benutzerdefinierten Dateityp definieren
BefehlBeschreibung
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 --filesAlle Dateien auflisten, die rg durchsuchen wuerde
rg --files -t rustAlle Rust-Dateien auflisten
BefehlBeschreibung
rg "old" -r "new"Ersetzungen vorschauen (nur stdout)
rg "(\w+)@(\w+)" -r '$1 at $2'Regex-Erfassungsgruppen-Ersetzung
rg "TODO" -r "DONE" --passthruVollstaendige Datei mit Ersetzungen anzeigen
rg -l "oldFunc" | xargs sed -i 's/oldFunc/newFunc/g'Tatsaechlich in Dateien ersetzen (mit sed)
Datei/VariableBeschreibung
~/.ripgreprcStandard-Konfigurationsdatei
RIPGREP_CONFIG_PATHBenutzerdefinierter Konfigurationsdateipfad
--no-configKonfigurationsdatei 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'
WerkzeugGeschwindigkeit.gitignoreUnicodeRegex
ripgrepAm schnellstenJaVollstaendigRust regex + PCRE2
grep -rLangsamNeinTeilweisePOSIX/erweitert
ag (Silver Searcher)SchnellJaVollstaendigPCRE
ackMittelNeinVollstaendigPerl
  • 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
ProblemLoesung
Fehlende Ergebnisse im Git-RepoDateien koennten in .gitignore sein — verwende rg -u oder --no-ignore
Binaerdatei uebersprungenVerwende rg -uuu oder --text, um Binaerdateien einzuschliessen
Regex passt nichtVersuche -P fuer die PCRE2-Engine oder -F fuer literale Zeichenketten
Keine Ergebnisse mit \bStandard-Engine unterstuetzt es moeglicherweise nicht — versuche rg -P "\bword\b"
Farben fehlen bei PipeVerwende --color always beim Piping zu less oder anderen Tools
Konfiguration laedt nichtPruefe RIPGREP_CONFIG_PATH oder verwende --no-config zum Debuggen
Symlinks werden nicht verfolgtFuege das -L oder --follow-Flag hinzu
Ergebnisse zu verrauschtVerwende -g '!pattern'-Globs oder -t type, um den Bereich einzuschraenken
Suche zu langsamVerwende --max-filesize, reduziere die Tiefe mit --max-depth oder filtere Typen