Regular Expressions   «Prev  Next»
Lesson 2 What is a regular expression?
Objective Describe regular expressions.

Define Regular Expression in Unix

You should already be familiar with the grep command, which has this general form:
% grep pattern file

grep searches one or more files for the specified pattern and displays all lines containing that pattern. The pattern argument is a regular expression[1].
Regular expressions (regex) play a vital role in Unix-based operating systems, as they are used to define complex search patterns for text processing and manipulation. Unix utilities, scripting languages, and programming interfaces extensively use regular expressions to perform a wide range of tasks, such as searching, filtering, validating, and transforming text data. The following points highlight the importance and applications of regular expressions in Unix:
  1. Text Searching: Regular expressions are used by Unix utilities like grep, sed, and awk for pattern matching within files or data streams. They allow users to search for specific text patterns, enabling the extraction or filtering of data based on complex criteria.
  2. Text Editing and Manipulation: Unix utilities, such as sed and awk, use regular expressions to perform advanced text editing and manipulation tasks. These tasks may include find-and-replace operations, text transformations, and the extraction of specific data elements from input text.
  3. Data Validation: Regular expressions can be employed in Unix shell scripts and programming languages to validate input data, ensuring it conforms to specific rules or formats. For example, a regex pattern can be used to verify if an input string is a valid email address, phone number, or URL.
  4. File and Directory Management: Unix commands like find, ls, and cp can utilize regular expressions to filter and manage files and directories based on pattern matching. This enables users to perform operations on specific sets of files or directories that meet certain criteria, such as file extensions or naming conventions.
  5. Log Analysis: Regular expressions are an essential tool for analyzing log files in Unix systems. They can be used to search for specific events, errors, or patterns within large and complex log files, making it easier to monitor system performance, troubleshoot issues, and maintain security.
  6. Stream Editing: Unix stream editors, such as sed, use regular expressions to process text data in real-time. This allows users to perform text transformations and filtering on data streams, making it possible to manipulate data as it is being generated or received.
  7. Programming Languages and Libraries: Many Unix-based programming languages, such as Perl, Python, and Ruby, provide native support for regular expressions. Libraries and modules are also available for languages like C and C++ to enable regex processing. This allows developers to leverage the power of regular expressions for text processing within their applications.

Regular expressions are a crucial component of Unix-based systems, as they provide a powerful and versatile method for text processing and manipulation. By utilizing regular expressions in various Unix utilities, shell scripts, and programming languages, users can efficiently search, filter, validate, and transform text data to meet a wide range of requirements.
Using regular expressions to perform searches often is called pattern matching [2]. In the simplest cases, a regular expression is a literal string[3] or sequence of characters. For example, bat is a regular expression that describes the literal characters b, a, and t, strung together. It describes a pattern found in words like bat, bath, or acrobat.
Regular expressions also can include special characters that let you perform “wildcard searches.” For example, the regular expression b[ae]t describes a pattern such as bat or bet. The brackets ([ ]) are an example of metacharacters[4], also called regular expression syntax. Do not confuse regular expressions with the wildcard patterns used to match file names. File-matching wildcards are used by the shell to match the names of files. By contrast, regular expressions are used by programs to search the contents of files. Some common programs that use regular expression syntax are grep, more, and vi. Beginners often are confused because some special characters, such as * and [ ], are used both as regular expression metacharacters and as file name wildcards.


Searching Strings in Files

Sometimes, the user wants to search some string of characters in a file, such as to search the record of some student whose family name is Gould in the freshman file of the last section. The greg command can be used to do this. The name "grep" comes from the g/re/p command of the ed (a Unix line editor). The g/re/p means "globally search for a regular expression and print all lines containing it."
The regular expressions are a set of UNIX rules that can be used to specify one or more items in a singly character string. The regular expressions work like wildcards (in fact, wildcards belong to the regular expressions), that is, they can save typing in many characters by using representation rules. But the level of support for regular expressions is not the same for different tools. The grep command searches a file or files for lines that have a certain pattern. The syntax is:
$ grep [options] character-string file(s)

In the next lesson, you will learn how quotes affect the shell’s interpretation of regular expressions.
[1] regular expression: A regular expression describes a pattern using literal characters and optional metacharacters known as regular expression syntax.
[2] pattern matching: Pattern matching is the task of using regular expressions to search for text.
[3] string: A string is a sequence of characters.
[4] metacharacter: A metacharacter is a character with special meaning in regular expressions and is not treated literally. Examples include the * and . metacharacters.