The grep command in Linux is a powerful tool for searching text patterns within files or input streams. Whether you’re a system administrator, developer, or casual user, mastering grep can save you time when sifting through logs, code, or data. Let’s dive into how it works with some practical examples.

Basic Syntax

The basic syntax of grep is:

grep [options] pattern [file...]

Here, pattern is what you’re searching for, and file is the target. If no file is specified, grep searches standard input.

Example 1: Simple Search

Suppose you have a file named sample.txt with this content:

Hello, world!
Linux is awesome.
Goodbye, world!

To find lines containing “world,” run:

grep "world" sample.txt

Output:

Hello, world!
Goodbye, world!

grep prints every line matching the pattern.

Example 2: Case-Insensitive Search

To ignore case (e.g., match “World” or “world”), use the -i option:

grep -i "WORLD" sample.txt

Output:

Hello, world!
Goodbye, world!

Example 3: Recursive Search

To search all files in a directory and its subdirectories, use -r. Imagine a folder logs/ with multiple .log files, or a path to a specific log:

grep -r "error" logs/

grep -r /var/log/exim_mainlog

This displays every line with “error” across all files in logs/, prefixed with filenames.

Example 4: Line Numbers and Context

Add -n to show line numbers:

grep -n "world" sample.txt

Output:

1:Hello, world!
3:Goodbye, world!

For context, use -A (after), -B (before), or -C (both) with a number of lines:

grep -A 1 "Linux" sample.txt

Output:

Linux is awesome.
Goodbye, world!

Example 5: Matching Whole Words

To match “world” only as a standalone word (not “worlds”), use -w:

grep -w "world" sample.txt

Output:

Hello, world!
Goodbye, world!

Conclusion

The grep command is versatile, with options like -v (invert match), -l (list filenames), and more. Experiment with these examples, and you’ll soon find grep indispensable for text processing in Linux!