GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Kann Grep True/False zurückgeben oder gibt es alternative Methoden?

Als Teil dieses Skripts muss ich prüfen können, ob das erste angegebene Argument mit dem ersten Wort der Datei übereinstimmt. Wenn dies der Fall ist, mit einer Fehlermeldung beenden; Wenn dies nicht der Fall ist, hängen Sie die Argumente an die Datei an. Ich verstehe, wie man if schreibt -Anweisung, aber nicht, wie man grep verwendet innerhalb eines Skripts. Ich verstehe das grep wird in etwa so aussehen

grep ^$1 schemas.txt

Ich habe das Gefühl, dass dies viel einfacher sein sollte, als ich es mache.

Ich erhalte einen Fehler „zu viele Argumente“ bei if Erklärung. Ich habe das Leerzeichen zwischen grep -q entfernt und bekam dann einen Fehler binärer Operator erwartet.

if [ grep -q ^$1 schemas.txt ]
then
        echo "Schema already exists. Please try again"
        exit 1
else
        echo "[email protected]" >> schemas.txt
fi

Akzeptierte Antwort:

grep gibt einen anderen Exit-Code zurück, wenn es etwas gefunden hat (Null) oder wenn es nichts gefunden hat (Nicht-Null). In einem if -Anweisung wird ein Null-Exit-Code auf „true“ und ein Nicht-Null-Exit-Code auf „false“ abgebildet. Außerdem hat grep ein -q Argument, um den übereinstimmenden Text nicht auszugeben (sondern nur den Exit-Statuscode zurückzugeben)

Sie können grep also folgendermaßen verwenden:

if grep -q PATTERN file.txt; then
    echo found
else
    echo not found
fi

Als kurze Anmerkung, wenn Sie so etwas wie if [ -z "$var" ]… tun , stellt sich heraus, dass [ ist eigentlich ein Befehl, den Sie ausführen, genau wie grep. Auf meinem System ist es /usr/bin/[ . (Nun, technisch gesehen hat Ihre Shell es wahrscheinlich eingebaut, aber das ist eine Optimierung. Es verhält sich, als wäre es ein Befehl). Es funktioniert genauso, [ gibt einen Null-Exit-Code für „true“ und einen Nicht-Null-Exit-Code für „false“ zurück. (test ist dasselbe wie [ , mit Ausnahme des schließenden ] )


Linux
  1. Was sind Bash-Exit-Codes in Linux

  2. Gibt es unter Linux standardmäßige Exit-Statuscodes?

  3. Gibt es eine alternative Schlaffunktion in C zu Millisekunden?

  4. Kann exit() den Prozess nicht beenden?

  5. Warum Exit-Code 141 mit grep -q?

Linux – Warum sind wahr und falsch so groß?

Grep wird langsam beendet, nachdem eine Übereinstimmung gefunden wurde?

Linux – Wie kann man herausfinden, ob sich Dateien in einem Ordner befinden und entsprechend beenden (in Ksh)?

Gibt es eine Open-Source-Alternative zu Landscape?

Gibt es eine Möglichkeit, die CPUID-Informationen einer CPU auszugeben?

Warum sind wahr und falsch so groß?