Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

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

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

share|improve this question
add comment

3 Answers

up vote 9 down vote accepted

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.

share|improve this answer
add comment

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
share|improve this answer
add comment

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.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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