How to search file for matching whole lines

awkgrepsed

I have a command which sends to stdout a series of numbers, each on a new line. I need to determine whether a particular number exists in the list. The match needs to be exact, not a subset. For example, a simple way to approach this that does not work would be to do:

/run/command/outputing/numbers | grep -c <numberToSearch>

My version of this gives a false positive on the following list when searching for '456':

1234567
98765
23
1771

If the count is non-zero, a match was found or if it was zero, the number is not in the list.

The issue with this is that the numberToSearch could match a subsequence of numbers on a line, instead I only want hits on the whole line. I looked at the man page for grep and did not see any way to only match whole lines. Is there a way to do this, or would I be better off using awk or sed or some other tool instead? I need a binary answer as to whether the number being search for is present or not.

Best Answer

Adding to Ansgar’s answer, consider -l (lower-case L) instead of -c.   It (-l) will give you a yes or no answer.

/run/command/outputting/numbers | grep –l '^456$'

will output “(standard input)” and exit with a status of 0 if a matching line is found; if the text is not found, it will output nothing and exit with a status of 1.  Some versions of grep also support a -q (quiet) option, which will suppress all output and give only the exit status.

These have the advantage that they are able to exit upon encountering the search string for the first time, and do not need to read the entire input.  If you need your command to run to completion, these options may be harmful.

Related Question