Wie kann ich überprüfen, ob eine Zeichenfolge in der Datei vorhanden ist?

Wie kann ich überprüfen, ob eine Zeichenfolge in der Datei vorhanden ist?

Ich schreibe gerade ein Bash-Skript, das prüfen soll, ob die exakte Zeichenfolge 329,in vorhanden ist myfile. Ich habe im Internet gesucht und einige Antworten gefunden, aber ich kann keine -xParameter verwenden, da ich mehr Zahlen als 329,in habe myfile. Und ohne den -xParameter kann ich das ExistsErgebnis 329auch mit erhalten, was ich nicht möchte.

Ich habe es versucht;

if grep -xqFe "329," "myfile"; then
    echo -e "Exists"
else
    echo -e "Not Exists"
fi

Und das Ergebnis war:

Not Exists

Innen myfile;

329, 2, 57

Wie kann ich das lösen?

Antwort1

Das -xist hier nicht relevant. Das bedeutet (von man grep):

-x, --line-regexp
       Select  only  those  matches that exactly match the whole line.
       For a regular expression pattern, this is  like  parenthesizing
       the pattern and then surrounding it with ^ and $.

Es ist also nur dann sinnvoll, wenn Sie Zeilen finden möchten, die nichts anderes als die genaue Zeichenfolge enthalten, nach der Sie suchen. Die gewünschte Option ist -w:

-w, --word-regexp
       Select  only  those  lines  containing  matches that form whole
       words.  The test is that the matching substring must either  be
       at  the  beginning  of  the  line,  or  preceded  by a non-word
       constituent character.  Similarly, it must be either at the end
       of  the  line  or followed by a non-word constituent character.
       Word-constituent  characters  are  letters,  digits,  and   the
       underscore.  This option has no effect if -x is also specified.

Das wird passen, wenn Sie Ihre Zielzeichenfolge als eigenständiges „Wort“ finden, als Zeichenfolge, die von „Nicht-Wort“-Zeichen umgeben ist. Sie brauchen auch das -Fhier nicht, das ist nur nützlich, wenn Ihr Muster Zeichen mit Sonderbedeutungen in regulären Ausdrücken enthält, die Sie wörtlich finden möchten (z. B. *), und Sie brauchen es -eüberhaupt nicht, das wäre erforderlich, wenn Sie mehr als ein Muster angeben möchten. Sie suchen also nach:

if grep -wq "329," myfile; then 
    echo "Exists" 
else 
    echo "Does not exist"
fi

Wenn Sie auch eine Übereinstimmung wünschen, wenn die Zahl die letzte in der Zeile ist, also keins ,dahinter steht, können Sie grep -Eerweiterte reguläre Ausdrücke aktivieren und dann eine Übereinstimmungentwedera 329gefolgt von einem Komma ( 329,) oder a 329am Ende der Zeile ( 329$). Diese können Sie folgendermaßen kombinieren:

if grep -Ewq "329(,|$)" myfile; then 
    echo "Exists" 
else 
    echo "Does not exist"
fi

Antwort2

Eine andere Alternative könnte sein:

if cat myfile | tr "," "\n" | grep -xqF "329"; then
    echo -e "Exists"
else
    echo -e "Not Exists"
fi

Grüße

verwandte Informationen