grep
macht diesen Job gut genug.
$ echo "::=BEGIN" > testfile1.txt
$ grep "::=BEGIN" -q testfile1.txt && echo "FOUND"
FOUND
$ grep "::=BEGIN" -q testfile1.txt && echo "FOUND" || echo "NOTFOUND"
FOUND
$ grep "whever" -q testfile1.txt && echo "FOUND" || echo "NOTFOUND"
NOTFOUND
Der Code führt einfach eine stille Suche innerhalb der Subshell durch. &&
Der logische UND-Operand prüft, ob der erste Befehl erfolgreich war. Wenn dies der Fall ist, wird er ausgeführt echo "FOUND"
. ||
prüft, ob dieses Echo ausgeführt wurde, dh ob wir etwas gefunden haben. Das zweite Echo wird nur ausgeführt, wenn der erste Befehl fehlgeschlagen ist.
Hier ist eine awk
Version:
$ awk '{i="NOTFOUND";if($0~/::=BEGIN/) i="FOUNDIT";exit } END { print i}' testfile1.txt
FOUNDIT
$ awk '{i="NOTFOUND";if($0~/whatevs/) i="FOUNDIT";exit } END { print i}' testfile1.txt
NOTFOUND
Grundidee ist hier einstellen i
zu NOTFOUND
, und wenn wir den String finden - ändern es FOUNDIT
. Am Ende, nachdem der erste Satz der Verarbeitungsdatei fertig ist, werden wir drucken i
und erfahren, ob wir etwas gefunden haben oder nicht.
Bearbeiten: In dem Kommentar haben Sie erwähnt, dass Sie das Ergebnis in eine Variable einfügen möchten. Shell stellt bereits eine Variable bereit, die den Exit-Status des vorherigen Befehls meldet $0
. Exit Status 0 bedeutet Erfolg, alles andere - scheitern. Zum Beispiel,
$ grep "::=BEGIN" -q testfile1.txt
$ echo $?
0
Wenn Sie den Exit-Status in einer Variablen verwenden möchten, können Sie dies folgendermaßen tun : MYVAR=$(echo $?)
. Erinnerst du dich, $? Exit-Status des vorherigen Befehls melden. Sie müssen dies also direkt nach dem Befehl grep verwenden.
Wenn Sie weiterhin meine früheren Einzeiler awk und grep verwenden möchten, können Sie denselben Trick verwenden MYVAR=$()
und den gewünschten Befehl zwischen die geschweiften Klammern setzen. Die Ausgabe wird der Variablen zugewiesen MYVAR
.
grep '::= BEGIN' filename &> /dev/null
und dann überprüfen$?
.