Echo basierend auf Grep-Ergebnis

Echo basierend auf Grep-Ergebnis

Ich brauche eine einzeilige Funktion, die „Ja“ oder „Nein“ anzeigt, ob grep Ergebnisse findet.

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

Antwort1

Wie wäre es mit:

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

Dann kannst Du es ruhig haben:

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

Aus der Grep-Handbuchseite:

Beendigungsstatus

Normalerweise ist der Beendigungsstatus 0, wenn ausgewählte Zeilen gefunden werden, und andernfalls 1. Der Beendigungsstatus 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.

Antwort2

Ich bin mir nicht sicher, was Sie mit „Einzeiler“ meinen, für mich ist das ein „Einzeiler“

Fügen Sie einfach ; if [ $? -eq 0 ]; then echo "Yes"; else echo "No"; finach 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 das Flag -q zu grep 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

Antwort3

Diese Version ist ein Zwischenprodukt zwischenWeboidesVersion undRadiusAusführung:

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

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

verwandte Informationen