# Grep Cheatsheet

## Overview
`grep` is a command-line utility used for searching text files for specific patterns.

## Basic Usage
```bash
grep pattern file.txt
```
Searches for `pattern` in `file.txt` and prints all lines that match.

## Flags
- `-i`: Ignore case when searching
- `-v`: Invert the match, printing all lines that do not match
- `-r`: Recursively search all files in a directory
- `-n`: Print the line number for each match
- `-w`: Match whole words only
- `-c`: Print only the count of matching lines

## Regular Expressions
`grep` uses regular expressions to define search patterns. Some common regex syntax includes:
- `.`: Matches any single character
- `*`: Matches zero or more of the preceding character
- `+`: Matches one or more of the preceding character
- `?`: Matches zero or one of the preceding character
- `[]`: Matches any character within the brackets
- `^`: Matches the beginning of a line
- `$`: Matches the end of a line
- `|`: Matches either the expression before or after the pipe

## Examples
```bash
grep -i "hello" file.txt        # Search for "hello" case-insensitively
grep -v "goodbye" file.txt     # Print all lines that do not contain "goodbye"
grep -rn "error" /var/log      # Recursively search all files in /var/log for "error" and print line numbers
grep -w "the" file.txt         # Match whole words only
grep -E "foo|bar" file.txt     # Match either "foo" or "bar" using extended regex syntax
```

## Resources
- [Grep on Wikipedia](https://en.wikipedia.org/wiki/Grep)
- [Grep manual](https://www.gnu.org/software/grep/manual/grep.html)