Using grep

New Linux users unfamiliar with this standard Unix tool may not realize how useful it is. In this tutorial for the novice user, Eric demonstrates grep techniques.

When I first started working in systems
integration, I was primarily a PC support person. I spent a lot of
time installing and supporting Windows applications in various PC
LAN configurations, running various versions (and vendors) of
TCP/IP transports. Since then, I have successfully ditched DOS and
moved on. Now, after working on various versions of Unix for a few
years, I porting some of our networking and data manipulation
libraries to other platforms and environments, such as the AS/400
minicomputer and the Macintosh. This ongoing experience has given
me a chance to appreciate just how powerful the tools we take for
granted with Linux really are.

Searching for a word (or any other value) in a group of files
is a very common task. Whether it's searching for a function in a
group of source code modules, trying to find a parameter in a set
of configuration files, or simply looking for a misplaced e-mail
message, text searching and matching operations are common in all
environments.

Unfortunately, this common task doesn't have an easy solution
on all platforms. On most, the best solution available is to use
the search function in an editor. But when it comes to Linux (and
other Unix descendants), you have many solutions. One of them is
grep.

grep is an acronym for
“global regular expression print,” a reference to the command in
the old ed line editor that prints
all of the lines in a file containing a specified sequence of
characters. grep does exactly that: it prints out lines in a file
that contain a match for a regular expression.
We'll gradually delve into what a regular expression is as we go
on.

Starting Out

First, let's look at a quick example. We will search for a
word in the Configure script provided with Linux for setting up the
Linux kernel source, which is usually installed in the
/usr/src/linux directory. Change to that directory and type (the
$ character is the prompt, don't type
it):

$ grep glob Configure

You should see:

# Disable filename globbing once and for all.

glob is in
bold to illustrate what grep
matched. grep does not actually print matches in bold.

grep looked for the sequence of characters
glob and printed the line of the Configure file
with that sequence. It did not look for the
wordglob. It
looked for g followed by l
followed by o followed by b.
This points out one important aspect of regular expressions: they
match sequences of characters, not words.

Before we dig any deeper into the specifics of pattern
matching, let's look at grep's “user interface” with a few
examples. Try the following two commands:

$ grep glob < Configure
$ cat Configure | grep glob

both of these two commands should print

# Disable filename globbing once and for all.

which probably looks familiar.

In all of these commands, we have specified the regular
expression as the first argument to grep. With the exception of any
command line switches, grep always expects the regular expression
as the first argument.

However, we presented grep with three different situations
and received the same response. In the first exercise, we provided
grep with the name of a file, and it opened that file and searched
it. grep can also take a list of filenames to search.

In the other two exercises we illustrated a feature that grep
shares with many other utilities. If no files are specified on the
command line, grep reads standard input. To
further illustrate standard input let's try one more
example:

$ grep foo

When you run that, grep appears to “hang” waiting for
something. It is. It's waiting for input. Type:

tttt

and press return. Nothing happens. Now type:

foobar

and press enter. This time, grep sees the string
foo in foobar and echos the
line foobar back at you, which is why
foobar appears twice. Now type
ctrl-d, the “end-of-file” character, to tell
grep that it has reached the end of the file, whereupon it exits.

You just gave grep an input file that consisted of
tttt, a newline character,
foobar, a newline character, and the end-of-file
character.

Piping input into grep from standard input also has another
frequent use: filtering the output of other commands. Sometimes
cutting out the unnecessary lines with grep is more convenient than
reading output page by page with
more or
less:

As Linux continues to play an ever increasing role in corporate data centers and institutions, ensuring the integrity and protection of these systems must be a priority. With 60% of the world's websites and an increasing share of organization's mission-critical workloads running on Linux, failing to stop malware and other advanced threats on Linux can increasingly impact an organization's reputation and bottom line.

Most companies incorporate backup procedures for critical data, which can be restored quickly if a loss occurs. However, fewer companies are prepared for catastrophic system failures, in which they lose all data, the entire operating system, applications, settings, patches and more, reducing their system(s) to “bare metal.” After all, before data can be restored to a system, there must be a system to restore it to.

In this one hour webinar, learn how to enhance your existing backup strategies for better disaster recovery preparedness using Storix System Backup Administrator (SBAdmin), a highly flexible bare-metal recovery solution for UNIX and Linux systems.