# **The Grep Mastery Guide: From Basic Search to Advanced Pattern Matching** ## **Table of Contents** 1. [Grep Fundamentals](#1-grep-fundamentals) 2. [Pattern Matching](#2-pattern-matching) 3. [Context Control](#3-context-control) 4. [File Operations](#4-file-operations) 5. [Output Control](#5-output-control) 6. [Performance Optimization](#6-performance-optimization) 7. [Advanced Techniques](#7-advanced-techniques) 8. [Real-World Recipes](#8-real-world-recipes) 9. [Alternatives & Complements](#9-alternatives--complements) --- ## **1. Grep Fundamentals** ### **Core Syntax** ```bash grep [OPTIONS] PATTERN [FILE...] ``` ### **Essential Modes** ```bash grep "text" file.txt # Basic search grep -E "regex" file.txt # Extended regex (ERE) grep -F "string" file.txt # Fixed string (no regex) grep -P "pattern" file.txt # Perl regex (GNU only) ``` ### **Common Options** ```bash -i # Case insensitive -v # Invert match -w # Whole words only -n # Show line numbers -c # Count matches -l # Show matching files only ``` --- ## **2. Pattern Matching** ### **Regex Basics** ```bash grep "^start" file.txt # Lines starting with grep "end$" file.txt # Lines ending with grep "a.b" file.txt # Any char between grep "a.*b" file.txt # Anything between ``` ### **Character Classes** ```bash grep "[[:digit:]]" file.txt # Any digit grep "[A-Za-z]" file.txt # Any letter grep "[^0-9]" file.txt # Non-digits ``` ### **Quantifiers** ```bash grep -E "a{3}" file.txt # Exactly 3 a's grep -E "a{2,4}" file.txt # 2 to 4 a's grep -E "a+" file.txt # One or more grep -E "a*" file.txt # Zero or more ``` --- ## **3. Context Control** ### **Show Surrounding Lines** ```bash grep -A 2 "error" log.txt # 2 lines After grep -B 3 "warning" log.txt # 3 lines Before grep -C 1 "critical" log.txt # 1 line Context ``` ### **Match Grouping** ```bash grep -E "(error|warning)" file.txt # OR condition grep -E "(fatal).*\1" file.txt # Backreference ``` --- ## **4. File Operations** ### **Recursive Search** ```bash grep -r "function" /src/ # Search directories grep -R --include="*.py" "def" . # Python files only ``` ### **Binary Files** ```bash grep -a "text" binary.file # Treat binary as text grep -I "pattern" * # Skip binary files ``` ### **Multiple Files** ```bash grep "pattern" *.log # All log files grep "pattern" file1 file2 # Specific files ``` --- ## **5. Output Control** ### **Formatting** ```bash grep -H "text" file.txt # Show filename grep -h "text" *.log # Hide filename grep -o "pattern" file.txt # Only matching part ``` ### **Color Highlighting** ```bash grep --color=auto "error" log.txt export GREP_COLORS='mt=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36' ``` ### **Null-Terminated Output** ```bash grep -l -Z "pattern" *.txt | xargs -0 rm # Safe for pipes ``` --- ## **6. Performance Optimization** ### **Fast Searches** ```bash grep -F "static string" largefile.txt # Fixed string faster LC_ALL=C grep "pattern" file.txt # ASCII speedup ``` ### **Parallel Grep** ```bash find . -type f | parallel -j+0 grep "pattern" {} ``` ### **Exclude Directories** ```bash grep -r --exclude-dir={node_modules,.git} "function" . ``` --- ## **7. Advanced Techniques** ### **Multiple Patterns** ```bash grep -e "error" -e "warning" log.txt # Multiple patterns grep -f patterns.txt file.txt # Patterns from file ``` ### **Inverse Matching** ```bash grep -v "success" log.txt | grep "error" # Errors without success ``` ### **Process Substitution** ```bash diff <(grep "A" file1) <(grep "B" file2) ``` --- ## **8. Real-World Recipes** ### **Log Analysis** ```bash # Top 10 frequent error messages grep -o "ERROR: .*" app.log | sort | uniq -c | sort -nr | head ``` ### **Code Refactoring** ```bash # Find all function calls needing update grep -rnw '/src/' -e 'deprecated_function' ``` ### **CSV Processing** ```bash # Extract column 3 where column 1 matches awk -F, '$1 ~ /pattern/{print $3}' data.csv | grep "value" ``` ### **Network Diagnostics** ```bash # Find all unique IPs hitting error pages grep " 404 " access.log | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | sort -u ``` --- ## **9. Alternatives & Complements** ### **When Not to Use Grep** | Task | Better Tool | |------|------------| | JSON processing | `jq` | | Columnar data | `awk` | | Complex regex | `perl`/`rg` | | File content replacement | `sed` | ### **Enhanced Grep Variants** ```bash rg (ripgrep) # Faster, .gitignore aware ack # Perl-powered, for coders ag (silver searcher) # Similar to rg ``` --- ## **Pro Tips** - **Always quote patterns** to prevent shell expansion - **Combine with `xargs`** for bulk operations: ```bash grep -l "old_version" *.js | xargs sed -i 's/old_version/new_version/g' ``` - **Use `--`** to indicate end of options: ```bash grep -- "-v" file.txt # Search for literal "-v" ``` ## **Further Learning** - `man grep` - Official documentation - [regex101.com](https://regex101.com) - Interactive regex tester - [ripgrep](https://github.com/BurntSushi/ripgrep) - Modern grep alternative **Need a specific grep solution?** Describe your search challenge!