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?
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
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