cli-tools
📋 Copy All ripgrep Commands
📄 Generate ripgrep PDF Guide
Ripgrep (rg) Cheatsheet
Installation
Platform
Command
Ubuntu/Debian
sudo apt update && sudo apt install ripgrep
Ubuntu/Debian (latest)
curl -LO https://github.com/BurntSushi/ripgrep/releases/download/13.0.0/ripgrep_13.0.0_amd64.deb && sudo dpkg -i ripgrep_13.0.0_amd64.deb
Fedora
sudo dnf install ripgrep
RHEL/CentOS
sudo yum install epel-release && sudo yum install ripgrep
Arch Linux
sudo pacman -S ripgrep
Alpine Linux
apk add ripgrep
macOS (Homebrew)
brew install ripgrep
macOS (MacPorts)
sudo port install ripgrep
Windows (Chocolatey)
choco install ripgrep
Windows (Scoop)
scoop install ripgrep
Windows (Winget)
winget install BurntSushi.ripgrep.MSVC
Snap (Universal)
sudo snap install ripgrep --classic
From Source (Cargo)
cargo install ripgrep
Verify Installation
rg --version
Basic Commands
Command
Description
rg "pattern"
Search for pattern in current directory recursively
rg "pattern" file.txt
Search for pattern in specific file
rg "pattern" /path/to/dir
Search for pattern in specific directory
rg -i "pattern"
Case-insensitive search
rg -s "Pattern"
Case-sensitive search (override smart case)
rg -S "pattern"
Smart case (case-insensitive if all lowercase)
rg -F "exact.string"
Search for exact literal string (no regex)
rg -w "word"
Search for whole word matches only
rg -l "pattern"
Show only filenames containing matches
rg --files-without-match "pattern"
Show only filenames without matches
rg -c "pattern"
Count matches per file
rg -n "pattern"
Show line numbers (enabled by default)
rg -N "pattern"
Hide line numbers
rg --column "pattern"
Show column numbers of matches
rg -C 3 "pattern"
Show 3 lines of context before and after match
rg -B 2 "pattern"
Show 2 lines before match
rg -A 2 "pattern"
Show 2 lines after match
rg --hidden "pattern"
Search hidden files and directories
rg -u "pattern"
Search all files including ignored ones
rg -uuu "pattern"
Search everything (hidden + ignored + binary)
Advanced Usage
Command
Description
rg -t py "pattern"
Search only Python files
rg -T js "pattern"
Exclude JavaScript files from search
rg -g "*.{js,ts}" "pattern"
Search using glob pattern
rg -g "!*.min.js" "pattern"
Exclude files matching glob pattern
rg --type-list
List all supported file types
rg --type-add 'web:*.{html,css,js}' -t web "pattern"
Define and use custom file type
rg -o "pattern"
Show only matched text, not entire line
rg "pattern" -r "replacement"
Show matches with replacement text
rg --json "pattern"
Output results in JSON format
rg -U "pattern.*\n.*pattern2"
Multiline search mode
rg -P "(?<=@)\w+"
Use PCRE2 regex engine for advanced patterns
rg -f patterns.txt
Read patterns from file (one per line)
rg --stats "pattern"
Show search statistics after results
rg -j 8 "pattern"
Use 8 threads for parallel search
rg --sort path "pattern"
Sort results by file path
rg --max-filesize 1M "pattern"
Skip files larger than 1MB
rg --max-columns 500 "pattern"
Skip lines longer than 500 characters
rg -L "pattern"
Follow symbolic links
rg --no-ignore-vcs "pattern"
Don't respect .gitignore files
rg --files
List all files that would be searched
rg --color always "pattern" \| less -R
Force color output for piping
rg --colors 'match:fg:yellow' "pattern"
Customize match color
rg --heading "pattern"
Group results by file with headings
rg --no-heading "pattern"
Show results inline without file grouping
rg "\bfunction\b" -A 5
Search for word boundary and show 5 lines after
Configuration
Ripgrep can be configured using a configuration file to set default options.
Configuration File Locations
# Linux/macOS
~/.config/ripgrep/config
~/.ripgreprc
# Windows
%APPDATA%\r ipgrep\c onfig
# Set custom location via environment variable
export RIPGREP_CONFIG_PATH = /path/to/config
Sample Configuration File
# ~/.ripgreprc
# Always use smart case
--smart-case
# Always show line numbers
--line-number
# Always show column numbers
--column
# Set default context lines
--context= 2
# Always search hidden files
--hidden
# Custom ignore patterns
--glob= !.git/*
--glob= !node_modules/*
--glob= !*.min.js
--glob= !*.map
--glob= !dist/*
--glob= !build/*
--glob= !target/*
# Custom colors
--colors= match:fg:yellow
--colors= match:style:bold
--colors= path:fg:green
--colors= line:fg:cyan
# Performance settings
--threads= 8
--max-filesize= 2M
# Output formatting
--heading
--max-columns-preview= 150
Environment Variables
# Set config file location
export RIPGREP_CONFIG_PATH = " $HOME /.ripgreprc"
# Disable config file
export RIPGREP_CONFIG_PATH = ""
Common Use Cases
Use Case: Finding Function Definitions
# Find function definitions in Python files
rg -t py "^def \w+\("
# Find function definitions with context
rg -t py "^def \w+\(" -A 3
# Find all class definitions in JavaScript
rg -t js "^class \w+" --heading
Use Case: Searching Through Logs
# Find errors in log files
rg -i "error|exception|fatal" /var/log/
# Find errors with timestamps and context
rg "ERROR" --glob "*.log" -C 2
# Count error occurrences per log file
rg -c "ERROR" --glob "*.log" --sort path
# Search compressed logs
rg -z "pattern" /var/log/archive/
Use Case: Code Refactoring
# Find all usages of deprecated API
rg "oldFunction\(" -t js -t ts
# Find TODO comments across codebase
rg "TODO|FIXME|HACK" --heading
# Find hardcoded credentials (security audit)
rg -i "(password|api[_-]?key|secret|token)\s*=\s*['\"]" --type-add 'config:*.{yml,yaml,json,env}' -t config
# Find imports of specific module
rg "^import.*from ['\"]module-name['\"]" -t js
Use Case: Finding Configuration Values
# Search for config value across all config files
rg "database_host" --type-add 'config:*.{yml,yaml,json,conf,ini,toml}' -t config
# Find environment variables
rg "export \w+=" --glob "*.sh" --glob "*.bash"
# Search in dotfiles (hidden files)
rg --hidden "pattern" ~/
Use Case: Working with Large Codebases
# Search with performance optimization
rg -j 16 --mmap "pattern" /large/codebase
# Search excluding test files
rg "pattern" -g "!**/*test*" -g "!**/*spec*"
# Search only recently modified files (combine with find)
find . -type f -mtime -7 -print0 | xargs -0 rg "pattern"
# Search with file size limit
rg --max-filesize 500K "pattern" /large/codebase
Best Practices
Use file type filters (-t, -T) instead of glob patterns when possible for better performance and readability
Leverage smart case (-S) as default - it searches case-insensitively when pattern is lowercase, case-sensitively otherwise
Create a .ripgreprc config file to set your preferred defaults and avoid repetitive command-line flags
Use .ignore files in project roots to exclude directories like node_modules, dist, build without affecting git
Prefer literal search (-F) when searching for exact strings containing regex metacharacters to avoid escaping
Use --stats during optimization to understand search performance and identify bottlenecks in large codebases
Combine with other tools like xargs, fzf, or sed for powerful text processing pipelines
Use --files first when debugging to verify which files will be searched before running the actual search
Set thread count (-j) based on your CPU cores for optimal performance on large searches
Use multiline mode (-U) sparingly as it's slower; prefer multiple searches when possible
Troubleshooting
Issue
Solution
No results found but pattern exists
Check if files are being ignored; use -u or -uuu to search ignored/hidden files
Binary file matches not shown
Use -a or --text to search binary files as text, or -uuu to search everything
Search is too slow
Reduce thread count with -j 1 to check if parallelism is causing issues, or use --max-filesize to skip large files
Regex pattern not working
Verify regex syntax; use -F for literal search or -P for PCRE2 engine with advanced features
Colors not showing in output
Use --color always when piping to other commands, or check terminal color support
.gitignore not being respected
Ensure you're in a git repository; use --debug to see which ignore files are being used
Memory usage too high
Disable memory mapping with --no-mmap or reduce --mmap-threshold value
Results not sorted as expected
Use --sort path, --sort modified, or --sort accessed (note: disables parallelism)
Config file not being loaded
Check RIPGREP_CONFIG_PATH environment variable and verify file exists at expected location
Symbolic links not followed
Use -L or --follow to follow symbolic links during search
Pattern matches too much
Use word boundaries (\b), start/end anchors (^, $), or -w for whole word matches
Can't search in specific file type
Check --type-list for available types or define custom type with --type-add
Quick Reference: Common Patterns
Pattern
Description
Example
\bword\b
Word boundaries
rg "\bfunction\b"
^pattern
Start of line
rg "^import"
pattern$
End of line
rg ";\s*$"
pattern1\|pattern2
OR operator
rg "error\|warning"
[0-9]{3}
Digit repetition
rg "[0-9]{3}-[0-9]{4}"
(?i)pattern
Case insensitive flag
rg "(?i)todo"
(?P<name>\w+)
Named capture group
rg "(?P<email>\w+@\w+\.\w+)"
.*
Any characters
rg "start.*end"
\s+
Whitespace
rg "=\s+\w+"
[^)]
Negated character class
rg "function\([^)]*\)"