Filtering Text with `grep`
Master `grep` for powerful pattern matching and filtering of text within files or command output.
Filtering Text with `grep` is a free Linux Command Line Mastery lesson on CoddyKit — lesson 2 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the Linux Command Line Mastery learning path, one of 4 lessons in the course, and your progress syncs across the web and the CoddyKit app.
What is `grep`?
Welcome to the world of text filtering! In this lesson, we'll master the mighty grep command.
grep stands for Global Regular Expression Print. It's a powerful command-line utility for searching plain-text data sets for lines that match a regular expression.
- It helps you quickly find specific information in files.
- It filters output from other commands.
- It's indispensable for system administration, programming, and data analysis.
Your First `grep` Search
The most basic use of grep is to search for a specific word or pattern within a file.
The general syntax is: grep "pattern" filename
Let's find all lines containing the word "error" in a log file. Imagine my_log.txt contains various system messages.
echo "System started.
Error: Disk full.
Warning: Low memory.
Error: Network down." > my_log.txt
grep "Error" my_log.txtSearching Multiple Files
grep isn't limited to a single file. You can search across multiple files or even all files in a directory.
To search multiple files, simply list them after the pattern. To search all files in the current directory, use a wildcard like *.
Let's search for "failed" in all .log files.
echo "Login success" > auth.log
echo "Login failed" > secure.log
echo "System OK" > kernel.log
grep "failed" *.logCase-Insensitive Search (`-i`)
By default, grep is case-sensitive. This means "Error" is different from "error" or "ERROR".
To perform a case-insensitive search, use the -i option (for ignore-case).
Try finding all instances of "apple", regardless of how it's capitalized.
echo "Apple is good.
I like apples.
APPLES are red." > fruit.txt
grep -i "apple" fruit.txtFinding What DOESN'T Match (`-v`)
Sometimes you want to see all lines that *do not* contain a specific pattern. This is called an inverted match.
The -v option (for invert-match) does exactly this. It shows all lines that *don't* match the given pattern.
Let's filter out lines that contain "comment" from a script.
echo "# This is a comment
print("Hello")
# Another comment
x = 10" > script.py
grep -v "#" script.pyCounting Occurrences (`-c`)
Instead of showing the matching lines, you might just want to know how many lines match your pattern.
The -c option (for count) tells grep to print only a count of the lines that match the pattern.
How many lines contain "warning" in our system log?
echo "Info: System started.
Warning: Low disk space.
Info: User logged in.
Warning: High CPU usage." > system.log
grep -c "Warning" system.logLocating Matches with Line Numbers (`-n`)
When you're debugging or analyzing a large file, knowing the exact line number where a match occurs can be very helpful.
The -n option (for line-number) displays the line number before each matching line.
Let's find the line numbers for "function" in a program file.
echo "def setup():
print("Setting up")
def run_function():
pass
# Main part" > program.py
grep -n "function" program.py`grep` with Standard Input
One of grep's most powerful features is its ability to work with pipes (|).
You can pipe the output of one command as input to grep, allowing you to filter command output in real-time.
Let's list all files and then filter to show only those ending with .txt.
touch report.txt document.pdf image.jpg notes.txt
ls -l | grep ".txt"`grep` Quick Check
You've learned several useful grep options. Let's test your understanding!
Consider a file named server.log which contains messages like "ERROR", "Error", "info", etc.
Recap: Filtering with `grep`
Great job! You've mastered the fundamentals of grep for filtering text.
Here's a quick summary of what we covered:
grep "pattern" filename: Basic search for a pattern in a file.grep "pattern" *.log: Search across multiple files using wildcards.-i: Ignore case during the search.-v: Invert the match, showing lines that *don't* contain the pattern.-c: Count the number of matching lines.-n: Display line numbers for matching lines.- Piping with
|: Filter output from other commands.
These options make grep an incredibly versatile tool for extracting and analyzing information on the command line. Keep practicing!
Frequently asked questions
Is the “Filtering Text with `grep`” lesson free?
Yes — the full text of “Filtering Text with `grep`” is free to read here on the web, and the Linux Command Line Mastery course includes 4 lessons in total. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the Linux Command Line Mastery course, upgrade to CoddyKit PRO.
What will I learn in “Filtering Text with `grep`”?
Master `grep` for powerful pattern matching and filtering of text within files or command output. You practise Linux Command Line Mastery with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.
Do I need any experience to start Linux Command Line Mastery?
No prior experience is required. Linux Command Line Mastery on CoddyKit is structured for beginners through advanced learners; this is — lesson 2 of 4, so you can start here or from the beginning and move at your own pace.
How long does the “Filtering Text with `grep`” lesson take?
Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.
Can I write and run code in this Linux Command Line Mastery lesson?
Yes. Every Linux Command Line Mastery lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.