Reputation: 165
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
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
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
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