7

I need a one liner which displays 'yes' or 'no' whether grep finds any results.

I have played with grep -c, but without success.

3 Answers 3

11

How about:

uptime | grep user && echo 'yes' || echo 'no'
uptime | grep foo && echo 'yes' || echo 'no'

Then you can have it quiet:

uptime | grep --quiet user && echo 'yes' || echo 'no'
uptime | grep --quiet foo && echo 'yes' || echo 'no'

From the grep manual page:

EXIT STATUS

Normally, the exit status is 0 if selected lines are found and 1 otherwise. But the exit status is 2 if an error occurred, unless the -q or --quiet or --silent option is used and a selected line is found.

2

Not sure what you mean by "one liner", for me this is a "one liner"

Just add ; if [ $? -eq 0 ]; then echo "Yes"; else echo "No"; fi after you grep command

bash$ grep ABCDEF /etc/resolv.conf; if [ $? -eq 0 ]; then echo "Yes"; else echo "No"; fi
No
bash$ grep nameserver /etc/resolv.conf; if [ $? -eq 0 ]; then echo "Yes"; else echo "No"; fi
nameserver 212.27.54.252
Yes

Add -q flag to grep if you want to supress grep result

bash$ grep -q nameserver /etc/resolv.conf; if [ $? -eq 0 ]; then echo "Yes"; else echo "No"; fi
Yes
2

This version is intermediate between Weboide's version and radius's version:

if grep --quiet foo bar; then echo "yes"; else echo "no"; fi

It's more readable than the former and it doesn't unnecessarily use $? like the latter.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .