Tuesday, March 23, 2010

grep : Examples

^ (Caret)=match expression at the start of a line, as in ^A.
$ (Question)=match expression at the end of a line, as in A$.
\ (Back Slash)=turn off the special meaning of the next character, as in \^.
[ ] (Brackets)=match any one of the enclosed characters, as in [aeiou]. Use Hyphen "-" for a range, as in [0-9].
[^ ]=match any one character except those enclosed in [ ], as in [^0-9].
. (Period)=match a single character of any value, except end of line.
* (Asterisk)=match zero or more of the preceding character or expression.
\{x,y\}=match x to y occurrences of the preceding.
\{x\}=match exactly x occurrences of the preceding.
\{x,\}=match x or more occurrences of the preceding.

grep smug files{search files for lines with 'smug'}
grep '^smug' files{'smug' at the start of a line}
grep 'smug$' files{'smug' at the end of a line}
grep '^smug$' files{lines containing only 'smug'}
grep '\^s' files{lines starting with '^s', "\" escapes the ^}
grep '[Ss]mug' files{search for 'Smug' or 'smug'}
grep 'B[oO][bB]' files{search for BOB, Bob, BOb or BoB }
grep '^$' files{search for blank lines}
grep '[0-9][0-9]' file{search for pairs of numeric digits}

grep '^From: ' /usr/mail/$USER{list your mail}
grep '[a-zA-Z]'{any line with at least one letter}
grep '[^a-zA-Z0-9]{anything not a letter or number}
grep '[0-9]\{3\}-[0-9]\{4\}'{999-9999, like phone numbers}
grep '^.$'{lines with exactly one character}
grep '"smug"'{'smug' within double quotes}
grep '"*smug"*'{'smug', with or without quotes}
grep '^\.'{any line that starts with a Period "."}
grep '^\.[a-z][a-z]'{line start with "." and 2 lc letters}

grep "unix" *.htm
search all .htm files in the current directory for any reference of  unix and give results similar to the below example text.

Search /etc/passwd for boo user:
$ grep boo /etc/passwd

force grep to ignore word case i.e match boo, Boo, BOO and all other combination with -i option:
$ grep -i "boo" /etc/passwd

search recursively i.e. read all files under each directory for a string "192.168.1.5"
$ grep -r "192.168.1.5" /etc/

select only those lines containing matches that form whole words i.e. match only boo word:
$ grep -w "boo" /path/to/file  

the number of times that the pattern has been matched for each file using -c (count) option:
$ grep -c 'word' /path/to/file  

use -n option, which causes grep to precede each line of output with the number of the line in the text file from which it was obtained:
$ grep -n 'word' /path/to/file 


matches only those lines that do not contain the given word. For example print all line that do not contain the word bar:
$ grep -v bar /path/to/file

print name of hard disk devices:
# dmesg | egrep '(s|h)d[a-z]' 


Display cpu model name:
# cat /proc/cpuinfo | grep -i 'Model'

the -l option to list file name whose contents mention main():
$ grep -l 'main' *.c 

force grep to display output in colors:
$ grep --color vivek /etc/passwd 

prints all lines in the file that begin with the letter a, followed by any one character, then the letters ple.
grep ^a.ple fruitlist.txt

grep for both "FS" and "HR" at the same time, but return lines that contain either entry.
egrep 'HR|FS' myfile

print all lines containing strings "abc" or "def" or both:
grep -E 'abc|def'

print all lines matching exactly "abc" or "def" :
grep -E '^abc$|^def$'

No comments:

Post a Comment