How to Search Text in the Linux Terminal Using `grep` and Regular Expressions (Regex)

2 min read .

The grep command in Linux not only allows for simple text searches but also supports searching using regular expressions (regex). Regex is a powerful tool for performing complex pattern searches. With regex, you can search for text with a specific format, varying patterns, and more.

Basic Syntax

The basic syntax for using grep with regex is:

grep -E "regex_pattern" [options] [file...]
  • -E enables extended regex mode.

Examples of Using Regex with grep

  1. Searching for Patterns with Special Characters

    Suppose you want to search for all lines containing a date in the YYYY-MM-DD format. You can use regex to define this date format:

    grep -E "[0-9]{4}-[0-9]{2}-[0-9]{2}" file_name

    Example:

    grep -E "[0-9]{4}-[0-9]{2}-[0-9]{2}" log.txt

    This command will search for all lines containing a date pattern in the YYYY-MM-DD format.

  2. Searching for One of Several Patterns

    If you want to search for lines containing one of several patterns, you can use the | (or) operator:

    grep -E "pattern1|pattern2" file_name

    Example:

    grep -E "error|warning" /var/log/syslog

    This command will display lines containing either the word “error” or “warning”.

  3. Searching for Text Starting or Ending with a Specific Pattern

    To search for text starting with a specific pattern, use ^ at the beginning of the pattern:

    grep -E "^pattern" file_name

    Example:

    grep -E "^Error" log.txt

    This command will search for all lines starting with the word “Error”.

    To search for text ending with a specific pattern, use $ at the end of the pattern:

    grep -E "pattern$" file_name

    Example:

    grep -E "success$" log.txt

    This command will search for all lines ending with the word “success”.

  4. Searching for Text with Placeholder Characters

    You can also use placeholder characters like . (dot) to represent a single character, or * (asterisk) to represent zero or more characters:

    grep -E "text.middle" file_name

    Example:

    grep -E "file_.*\.txt" *.txt

    This command will search for files whose names start with “file_” and end with “.txt”, with any characters in between.

  5. Searching for Patterns with Character Ranges

    You can use square brackets [] to specify a range of characters:

    grep -E "pattern[0-9]" file_name

    Example:

    grep -E "file[1-3].txt" *.txt

    This command will search for files with names ending in the numbers 1, 2, or 3 before “.txt”.

Combining Regex with Other Options

You can combine regex with other options for more complex searches. For example, to search for text with a specific pattern and display line numbers:

grep -n -E "regex_pattern" file_name

Example:

grep -n -E "[0-9]{3}-[0-9]{2}-[0-9]{4}" contact_list.txt

This command will display line numbers where a phone number pattern in the format XXX-XX-XXXX is found.

Conclusion

Using regular expressions (regex) with the grep command allows you to perform highly specific and flexible searches in files. By understanding and utilizing the capabilities of regex, you can conduct complex pattern searches and obtain precise results according to your needs.

Tags:
Linux

See Also

chevron-up