Bhushan J
Bhushan J

Reputation: 165

Grepping for exact words with UNIX

I want to search Exact word pattern in Unix. Example: Log.txt file contains following text:

aaa
bbb
cccaaa   ---> this should not be counted in grep output looking for aaa

I am using following code:

count=$?
count=$(grep -c aaa $EAT_Setup_BJ3/Log.txt)

Here output should be ==> 1 not 2, using above code I am getting 2 as output. Something is missing, so can any one help me for the this please?

Upvotes: 15

Views: 72252

Answers (3)

Maso Mahboob
Maso Mahboob

Reputation: 119

You can use a word boundary (\b) in regex to match an exact word. To enable extended regex, use the -E flag with grep.

Solution:

grep -E "\baaa\b" $EAT_Setup_BJ3/Log.txt

Upvotes: 1

Atropo
Atropo

Reputation: 12531

Use whole word option:

grep -c  -w aaa $EAT_Setup_BJ3/Log.txt

From the grep manual:

-w, --word-regexp

Select only those lines containing matches that form whole words. The test is that the matching substring must either be at the beginning of the line, or preceded by a non-word constituent character.

As noted in the comment -w is a GNU extension. With a non GNU grep you can use the word boundaries:

grep -c "\<aaa\>" $EAT_Setup_BJ3/Log.txt

Upvotes: 36

Jens
Jens

Reputation: 72629

Word boundary matching is an extension to the standard POSIX grep utility. It might be available or not. If you want to search for words portably, I suggest you look into perl instead, where you would use

perl -ne 'print if /\baaa\b/' $EAT_Setup_BJ3/Log.txt

Upvotes: 7

Related Questions