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.

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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.