Echo basierend auf grep Ergebnis

7

Ich brauche einen Einzeiler, der "Ja" oder "Nein" anzeigt, ob grep Ergebnisse findet.

Ich habe mit gespielt grep -c, aber ohne Erfolg.

Takeshin
quelle

Antworten:

11

Wie wäre es mit:

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

Dann können Sie es ruhig haben:

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

Aus der grep-Handbuchseite:

STATUS BEENDEN

Normalerweise ist der Exit-Status 0, wenn ausgewählte Zeilen gefunden werden, andernfalls 1. Der Exit-Status ist jedoch 2, wenn ein Fehler aufgetreten ist, es sei denn, die Option -q oder --quiet oder --silent wird verwendet und eine ausgewählte Zeile wird gefunden.

Weboide
quelle
2

Ich bin mir nicht sicher, was du mit "Einzeiler" meinst. Für mich ist dies ein "Einzeiler".

Fügen ; if [ $? -eq 0 ]; then echo "Yes"; else echo "No"; fiSie einfach nach dem grep-Befehl hinzu

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

Fügen Sie grep das Flag -q hinzu, wenn Sie das grep-Ergebnis unterdrücken möchten

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

Diese Version liegt zwischen der Version von Weboide und der Version von Radius :

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

Es ist besser lesbar als das erstere und wird nicht unnötig $?wie das letztere verwendet.

Bis auf weiteres angehalten.
quelle