The grep command combines with regular expressions to create powerful search capabilities. System administrators and developers rely on grep regex for filtering log files, searching codebases, and processing text data.
This guide demonstrates grep pattern matching with practical examples.
Grep Regular Expression
The syntax for grep with regular expressions follows this format:
grep [regex] [file]
Regular expressions filter data through pattern matching. Commands like awk and sed also use regex for text manipulation.
Regex statements contain two character types:
- Literals match standard text characters
- Metacharacters have special meaning unless escaped with backslash
Grep supports three regex syntax options:
- Basic Regular Expression (BRE)
- Extended Regular Expressions (ERE)
- Pearl Compatible Regular Expressions (PCRE)
Grep uses BRE syntax by default.
Grep Regex Example
Run this command to test pattern matching:
grep if .bashrc
The pattern searches for the character string. Results show all instances where letter i appears followed by f. The output highlights if, elif, notify, and identifying.
The command returns only matching lines.
How to Use Regex With Grep
Regex provides multiple methods to refine grep searches. These examples explain basic syntax and logic. Combine patterns to create complex statements.
Literal Matches
Literal matches find exact character strings. The previous if example demonstrates literal matching.
Searches are case-sensitive. Run this command for different results:
grep If .bashrc
-i or --ignore-case option to match all case combinations.
Search for multiple words using quotation marks:
grep "if the" .bashrc
Omitting quotes treats the second word as a file location.
Anchor Matches
Anchors define line position for matches. Two anchor types exist:
- Caret sign (
^) searches for lines starting with the expression - Dollar sign (
$) searches for lines ending with the expression
Match lines starting with alias:
grep ^alias .bashrc
The search ignores lines with tabs or spaces before the word.
Match lines ending with then:
grep then$ .bashrc
Use both anchors for single word matches:
grep ^esac$ .bashrc
Find empty lines using only anchors. Add -n to show line numbers:
grep -n ^$ .bashrc
Match Any Character
The period (.) metacharacter matches any single character. Example:
grep r.o .bashrc
Output shows letter r, followed by any character, followed by o. The period represents letters, numbers, signs, or spaces.
Add multiple periods for multiple placeholders:
grep r..t .bashrc
Combine with anchors for complex patterns:
grep ..t$ .bashrc
This finds lines with any two characters followed by t at the end.
Bracket Expressions
Bracket expressions match multiple characters at one position. Match lines containing and or end:
grep [ae]nd .bashrc
Exclude characters by adding caret inside brackets. Match everything except and or end:
grep [^ae]nd .bashrc
Specify character ranges using hyphens. Search for capital letters:
grep [A-Z] .bashrc
Combine brackets with anchors to find words starting with capitals:
grep ^[A-Z] .bashrc
Use multiple ranges. Match non-letter characters:
grep [^a-zA-Z] .bashrc
Output highlights numbers and characters while ignoring letters.
Character Classes
Grep provides predefined character classes to simplify bracket expressions.
| Syntax | Description | Equivalent |
|---|---|---|
[[:alnum:]] |
All letters and numbers | [0-9a-zA-Z] |
[[:alpha:]] |
All letters | [a-zA-Z] |
[[:blank:]] |
Spaces and tabs | |
[[:digit:]] |
Digits 0 to 9 | [0-9] |
[[:lower:]] |
Lowercase letters | [a-z] |
[[:punct:]] |
Punctuation characters | [^a-zA-Z0-9] |
[[:upper:]] |
Uppercase letters | [A-Z] |
[[:xdigit:]] |
Hexadecimal digits | [0-9a-fA-F] |
Quantifiers
Quantifiers specify appearance frequency. The table shows each syntax with descriptions.
| Syntax | Description |
|---|---|
* |
Zero or more matches |
? |
Zero or one match |
+ |
One or more matches |
{n} |
Exactly n matches |
{n,} |
n or more matches |
{,m} |
Up to m matches |
{n,m} |
From n up to m matches |
The asterisk matches patterns zero or more times:
grep m*and .bashrc
This matches and, mand, mmand because m repeats any number of times.
Match zero or exactly one occurrence using question mark. Encase in quotes and escape the character:
grep 'm?and' .bashrc
Use extended regex to avoid escaping:
grep -E 'm?and' .bashrc
Output highlights instances of and or mand.
Specify exact repetitions using range quantifiers. Search for strings with two vowels:
grep '[aeiouAEIOU]{2}' .bashrc
Or use extended syntax:
grep -E '[aeiouAEIOU]{2}' .bashrc
Alternation
Alternation defines alternative matches. Encase alternatives in single quotes and separate with escaped pipe:
grep 'bash|alias' .bashrc
Use extended regex to omit escape characters:
grep -E 'bash|alias' .bashrc
Output highlights both string instances.
Grouping
Group patterns into single items using escaped parentheses for regular regex or extended syntax.
Search for bashrc with optional rc characters:
grep 'bash(rc)?' .bashrc
Extended syntax version:
grep -E 'bash(rc)?' .bashrc
Output highlights bashrc instances. Since rc is optional, bash also matches.
Special Backslash Expressions
Grep offers unique backslash expressions for word boundary matching.
| Syntax | Example | Description |
|---|---|---|
b |
'bandb' |
Word boundaries |
B |
'Band' |
Non-word boundaries |
< |
'<and' |
Start of word |
> |
'and>' |
End of word |
w |
'wand' |
Word characters |
W |
'Wand' |
Non-word characters |
s |
'sand' |
Whitespace characters |
S |
'Sand' |
Non-whitespace characters |
Use b boundaries to locate isolated words:
grep 'bse[et]b' .bashrc
The expression locates see and set. Boundaries ensure word isolation.
Escaping Meta-Characters
Escape metacharacters to treat special characters as literals. Search for a period at line end:
grep '.$' .bashrc
Preventing character interpretation helps when searching source code or configuration files.
FAQs
Grep regex means global regular expression print. It combines grep command with pattern matching to search files efficiently.
Add the -i flag to grep commands for case-insensitive matching. Example: grep -i "pattern" file.txt matches all case variations.
Basic Regular Expression (BRE) requires escaping special characters. Extended Regular Expression (ERE) with -E flag allows cleaner syntax without backslashes.
Use alternation with pipe symbol. Example: grep -E 'pattern1|pattern2' file.txt searches for either pattern in the file.
Yes, specify multiple files or use wildcards. Example: grep "pattern" *.txt searches all text files in current directory.

