Any POSIX compliant version of
grep has the switch
-q for quiet:
-q Quiet. Nothing shall be written to the standard output, regardless of matching lines. Exit with zero status if an input line is selected.
In GNU grep (and possibly others) you can use long-option synonyms as well:
-q, --quiet, --silent suppress all normal output
$ echo "here" | grep -q "here" $ echo $? 0
String doesn’t exist:
$ echo "here" | grep -q "not here" $ echo $? 1
Just redirect output of
grep sample test.txt > /dev/null echo $?
You simply need to combine
grep -q <pattern> with an immediate check of the exit code for last process to quit (
You can use this to build up a command like this, for example:
uname -a | grep -qi 'linux' ; case "$?" in "0") echo "match" ;; "1") echo "no match" ;; *) echo "error" ;; esac
You can optionally suppress output from
STDERR like so:
grep -qi 'root' /etc/shadow &> /dev/null ; case "$?" in "0") echo "match" ;; "1") echo "no match" ;; *) echo "error: $?" ;; esac
This will print
error: 2 from the
case statement (assuming we do not have privileges to read
/etc/shadow or that the file does not exist) but the error message from
grep will be redirected to
/dev/null so we don’t ever see it.