echo based on grep result

8,279

Solution 1

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.

Solution 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

Solution 3

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:
8,279

Related videos on Youtube

takeshin
Author by

takeshin

Updated on September 17, 2022

Comments

  • takeshin
    takeshin over 1 year

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

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