Ripgrep

File Filtering

rg -t py "pattern"                # search Python files
rg -T py "pattern"                # exclude Python files
rg -t py -t js "pattern"          # search Python and JS files
rg -g "*.toml" "pattern"          # glob include
rg -g "!*.min.js" "pattern"       # glob exclude
rg -g "*.{rs,toml}" "pattern"     # multiple extensions

Directory Control

rg --max-depth 3 "pattern"        # limit search depth
rg -d 3 "pattern"                 # shorthand for max-depth
rg "pattern" --ignore-file .customignore
rg --no-ignore "pattern"          # ignore .gitignore
rg --no-ignore-vcs "pattern"      # ignore VCS ignore files only

Regex Patterns

rg "start.*end"                   # basic regex
rg -e "pat1" -e "pat2"            # multiple patterns (OR)
rg -f patterns.txt                # patterns from file
rg -F "literal.*string"           # fixed string (no regex)
rg -U "line1\nline2"              # multi-line mode
rg "\bword\b"                     # word boundary

Context & Display

rg -C 3 "pattern"                 # 3 lines before and after
rg -B 2 "pattern"                 # 2 lines before
rg -A 2 "pattern"                 # 2 lines after
rg --context-separator "---" "pattern"
rg -n "pattern"                   # show line numbers (default)
rg --no-line-number "pattern"     # hide line numbers

Output Formats

rg -l "pattern"                   # list filenames only
rg --files-without-match "pattern"
rg -c "pattern"                   # count matches per file
rg --count-matches "pattern"      # count total matches
rg -o "pattern"                   # show only matching parts
rg --json "pattern"               # JSON output
rg --vimgrep "pattern"            # vim quickfix format

File Types

rg --type-list                    # list all file types
rg -t css "color"                 # CSS files
rg -t html "href"                 # HTML files
rg -t rust "fn main"              # Rust files
rg -t markdown "TODO"             # Markdown files
rg -t sh "echo"                   # Shell scripts

Binary & Hidden

rg --hidden "pattern"             # search hidden files
rg --no-hidden "pattern"          # exclude hidden files (default)
rg --binary "pattern"             # search binary files
rg --no-binary "pattern"          # skip binary files (default)
rg -a "pattern"                   # treat all files as text

Replacing

rg -r "replacement" "pattern"     # preview replacement (no file change)
rg -r '$1' "(\w+)"                # use capture groups
rg -r '$1$new$3' "(old)(.*)($)" "pattern"

Sort & Limit

rg --sort path "pattern"          # sort by file path
rg --sortr modified "pattern"     # sort by modification time (desc)
rg --sort accessed "pattern"      # sort by access time
rg -m 100 "pattern"               # max 100 matches
rg -m 0 "pattern"                 # unlimited matches

Configuration

rg --config-file ~/.ripgreprc     # use config file
rg --no-config "pattern"          # ignore config
echo '--smart-case' >> ~/.ripgreprc
echo '--max-columns=150' >> ~/.ripgreprc
echo '--colors="match:fg:red"' >> ~/.ripgreprc

Performance Tips

rg -j 4 "pattern"                 # use 4 threads
rg --max-filesize 10M "pattern"   # skip files larger than 10MB
rg --mmap "pattern"               # use memory-mapped I/O
rg --no-mmap "pattern"            # disable memory-mapped I/O
rg --fast "pattern"               # reduce regex complexity

Practical Examples

# Find all TODO/FIXME in code
rg -n "TODO|FIXME|HACK" -t py -t rs -t js

# Find function definitions
rg "fn \w+" -t rust
rg "(def|class) \w+" -t py
rg "function \w+" -t js

# Search for IP addresses
rg "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}" access.log

# Find secret patterns
rg -i "password|secret|api_key|token" --type-add 'lock:*.lock' -t lock

# Extract URLs from files
rg -o "https?://[^\s)]+" -N --no-filename

# Count pattern per file, sorted
rg -c "error" --sort path

# Search in recently modified files
rg "pattern" --sortr modified --max-depth 5

# Preview find-and-replace
rg -r "newFunc" "oldFunc" -t go

基础搜索

rg "pattern"                      # 在当前目录搜索
rg "pattern" path/to/dir          # 在指定目录搜索
rg -i "pattern"                   # 忽略大小写
rg -w "word"                      # 全词匹配
rg "pattern" file.txt             # 在单个文件中搜索

文件过滤

rg -t py "pattern"                # 搜索 Python 文件
rg -T py "pattern"                # 排除 Python 文件
rg -t py -t js "pattern"          # 搜索 Python 和 JS 文件
rg -g "*.toml" "pattern"          # glob 包含
rg -g "!*.min.js" "pattern"       # glob 排除
rg -g "*.{rs,toml}" "pattern"     # 多个扩展名

目录控制

rg --max-depth 3 "pattern"        # 限制搜索深度
rg -d 3 "pattern"                 # 限制深度的简写
rg "pattern" --ignore-file .customignore
rg --no-ignore "pattern"          # 忽略 .gitignore
rg --no-ignore-vcs "pattern"      # 仅忽略 VCS 忽略文件

正则模式

rg "start.*end"                   # 基本正则
rg -e "pat1" -e "pat2"            # 多个模式 (或)
rg -f patterns.txt                # 从文件读取模式
rg -F "literal.*string"           # 固定字符串 (不解析正则)
rg -U "line1\nline2"              # 多行模式
rg "\bword\b"                     # 词边界

上下文与显示

rg -C 3 "pattern"                 # 前后各 3 行
rg -B 2 "pattern"                 # 前 2 行
rg -A 2 "pattern"                 # 后 2 行
rg --context-separator "---" "pattern"
rg -n "pattern"                   # 显示行号 (默认)
rg --no-line-number "pattern"     # 隐藏行号

输出格式

rg -l "pattern"                   # 仅列出文件名
rg --files-without-match "pattern"
rg -c "pattern"                   # 每个文件的匹配数
rg --count-matches "pattern"      # 总匹配数
rg -o "pattern"                   # 仅显示匹配部分
rg --json "pattern"               # JSON 输出
rg --vimgrep "pattern"            # vim quickfix 格式

文件类型

rg --type-list                    # 列出所有文件类型
rg -t css "color"                 # CSS 文件
rg -t html "href"                 # HTML 文件
rg -t rust "fn main"              # Rust 文件
rg -t markdown "TODO"             # Markdown 文件
rg -t sh "echo"                   # Shell 脚本

二进制与隐藏文件

rg --hidden "pattern"             # 搜索隐藏文件
rg --no-hidden "pattern"          # 排除隐藏文件 (默认)
rg --binary "pattern"             # 搜索二进制文件
rg --no-binary "pattern"          # 跳过二进制文件 (默认)
rg -a "pattern"                   # 将所有文件当作文本

替换预览

rg -r "replacement" "pattern"     # 预览替换 (不修改文件)
rg -r '$1' "(\w+)"                # 使用捕获组
rg -r '$1$new$3' "(old)(.*)($)" "pattern"

排序与限制

rg --sort path "pattern"          # 按路径排序
rg --sortr modified "pattern"     # 按修改时间降序
rg --sort accessed "pattern"      # 按访问时间排序
rg -m 100 "pattern"               # 最多 100 个匹配
rg -m 0 "pattern"                 # 不限匹配数

配置

rg --config-file ~/.ripgreprc     # 使用配置文件
rg --no-config "pattern"          # 忽略配置
echo '--smart-case' >> ~/.ripgreprc
echo '--max-columns=150' >> ~/.ripgreprc
echo '--colors="match:fg:red"' >> ~/.ripgreprc

性能技巧

rg -j 4 "pattern"                 # 使用 4 个线程
rg --max-filesize 10M "pattern"   # 跳过大于 10MB 的文件
rg --mmap "pattern"               # 使用内存映射 I/O
rg --no-mmap "pattern"            # 禁用内存映射 I/O
rg --fast "pattern"               # 降低正则复杂度

实用示例

# 查找代码中的 TODO/FIXME
rg -n "TODO|FIXME|HACK" -t py -t rs -t js

# 查找函数定义
rg "fn \w+" -t rust
rg "(def|class) \w+" -t py
rg "function \w+" -t js

# 搜索 IP 地址
rg "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}" access.log

# 查找敏感信息模式
rg -i "password|secret|api_key|token" --type-add 'lock:*.lock' -t lock

# 提取 URL
rg -o "https?://[^\s)]+" -N --no-filename

# 按文件统计模式出现次数并排序
rg -c "error" --sort path

# 搜索最近修改的文件
rg "pattern" --sortr modified --max-depth 5

# 预览查找替换
rg -r "newFunc" "oldFunc" -t go