Search & Regex
grep, ripgrep (rg), find, sed, and awk - the Linux text search toolkit Python developers use to grep logs, locate files, and one-shot transform configs on servers.
Search across all documentation pages
grep, ripgrep (rg), find, sed, and awk - the Linux text search toolkit Python developers use to grep logs, locate files, and one-shot transform configs on servers.
rg "TaxCalculator" src/
rg -n "raise_for_status" --type py
find /var/log/myapp -name "*.log" -mtime +7
grep -E "ERROR|CRITICAL" /var/log/myapp/app.log | tail -50When to reach for this:
# Find all TODO(FIXME) in Python sources
rg -n "TODO|FIXME" -g "*.py" src/ tests/
# Find config referencing old Redis host
rg -l "redis://legacy" --glob "!uv.lock"
# Logs: errors in last hour with request id
journalctl -u billing-api --since "1 hour ago" | rg "request_id=550e8400"
# Delete stale rotated logs older than 14 days (dry run first)
find /var/log/billing-api -name "*.log.*" -mtime +14 -printWhat this demonstrates:
rg type and glob filters reduce noise-l lists files only for bulk replace planningjournalctl piped to rg for structured grepfind -print before -delete safety-r recursive (slow on big trees).| Task | Tool |
|---|---|
| Code symbol search | rg pattern src/ |
| JSON logs | jq (preferred) or rg on key |
| File by name | find . -name '*.py' |
| In-place replace | sed -i.bak with backup |
| CSV 3rd column | awk -F, '{print $3}' |
# Equivalent to rg for one file with line numbers
grep -n "def main" src/app/cli.py
# Find empty __init__.py markers
find src -name "__init__.py" -emptygrep -r from / - IO storm and permission errors. Fix: always start from project or /var/log/app.-i.bak or edit locally + deploy.rg locate + manual edit for critical files.rg or grep -I.LC_ALL=C for ASCII logs.jq for JSON logs.| Alternative | Use When | Don't Use When |
|---|---|---|
| IDE search | Local refactor | SSH-only prod logs |
git grep | Tracked files only | Generated or log files |
ag / ack | Legacy environments | rg available |
| Python script | Complex parsing | One-liner faster in shell |
rg for speed and ignore rules; git grep when searching only committed snapshots at specific revision.
rg -i pattern or grep -i.
rg -U multiline mode for cross-line patterns - use sparingly.
mtime file content change; atime access (often disabled on servers for performance).
macOS sed requires backup extension sed -i '' - test on target OS.
rg auto-ignores; for grep use --exclude-dir=.venv.
rg -c pattern per file or rg pattern | wc -l.
zgrep / zcat file.gz | rg pattern.
Avoid find -delete at scale without -print dry run first.
Prefer Python re in application code; shell regex for operator one-offs only.
Stack versions: This page was written for Python 3.14.0 (stable 3.14, maintenance 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, and uv 0.6+.
Reviewed by Chris St. John·Last updated Jul 19, 2026