The term grep means to globally search for a regular expression and print all lines containing it. When you use the grep command every line containing a specified character pattern prints to the screen. Using the grep command does not change file content.
The syntax for the grep command is:
grep options pattern filenames
The options that you use with the grep command can modify your search. Each option except the -w option can be used with the egrep and fgrep commands. The table describes the options for the grep command.
Option | Definition |
---|---|
-i |
Searches for both uppercase and lowercase characters |
-l |
Lists the names of files with matching lines |
-n |
Precedes each line with the relative line number in the file |
-v |
Inverts the search to display lines that do not match pattern |
-c |
Counts the lines that contain pattern |
-w |
Searches for the expression as a complete word, ignoring those matches that are substrings of larger words |
To search for all lines that contain the pattern root in the /etc/group file and view their line numbers, perform the command:
$ grep -n root /etc/group 1:../../../:0:root 2:other::1:root 3:bin::2:root,bin,daemon 4:sys::3:root,bin,adm 5:adm::4:root,daemon 6:uucp::5:root 7:mail::6:root 8:tty::7:root,adm 9:lp::8:root,adm 10:nuucp::9:root 12:daemon::12:root $
Note: For multiple file searches, the results show only the file name in which the pattern was found. For single file searches, only the matching entries are displayed. |
To search for all lines that do not contain the pattern root in the /etc/group file, perform the command:
$ grep -v root /etc/group staff::10: sysadmin::14: smmsp::25:smmsp gdm::50: webservd::80: nobody::60001: noaccess::60002: nogroup::65534: $
To search for the names of the files that contain the pattern root in the /etc directory, perform the command:
$ cd /etc $ grep -l root group passwd hosts group passwd $
To count the number of lines containing the pattern root in the /etc/group file, perform the command:
$ grep -c root group 11 $
The grep command supports several regular expression metacharacters to further define a search pattern. The table describes some of the regular expression metacharacters.
Metacharacter | Purpose | Example | Result |
---|---|---|---|
^ | Beginning of line anchor | '^pattern' | Matches all lines beginning with pattern |
$ | End of line anchor | 'pattern$' | Matches all lines ending with pattern |
. | Matches one character | 'p.....n' | Matches lines containing a “p,” followed by five characters, and followed by an “n“ |
* | Matches the preceding item zero or more times | '[a-z]*' | Matches lowercase alphanumeric characters or nothing at all |
[ ] | Matches one character in the pattern | '[Pp]attern' | Matches lines containing Pattern or pattern |
[^] | Matches one character not in the pattern | '[^a-m]attern' | Matches lines that do not contain “a” through “m” and followed by attern |
To print all lines that begin with the letters no in the /etc/passwd file, perform the command:
$ grep '^no' /etc/passwd nobody:x:60001:60001:NFS Anonymous Access User:/: noaccess:x:60002:60002:No Access User:/: nobody4:x:65534:65534:SunOS 4.x NFS Anonymous Access User:/: $
To print all lines containing an “A,” followed by three characters, followed by an “n” in the /etc/passwd file, perform the command:
$ grep 'A...n' /etc/passwd adm:x:4:4:Admin:/var/adm lp:x:71:8:Line Printer Admin:/usr/spool/lp uucp:x:5:5:uucp Admin:/usr/lib/uucp nuucp:x:9:9:uucp Admin:/var/spool/uucppublic:/usr/lib/uucp/uucico listen:x:37:4:Network Admin:/usr/net/nls
To print all lines that end with the word adm in the /etc/group file, perform the command:
$ grep 'adm$' /etc/group sys::3:root,bin,adm tty::7:root,adm lp::8:root,adm