
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"; fi
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 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