440 Stimmen

Wie testet man mit der Bash, ob ein String in einer Datei existiert?

Ich habe eine Datei, die Verzeichnisnamen enthält:

my_list.txt :

/tmp
/var/tmp

Ich möchte in der Bash prüfen, bevor ich einen Verzeichnisnamen hinzufüge, ob dieser Name bereits in der Datei existiert.

8voto

GTodorov Punkte 1786

Hier ist ein schneller Weg, um eine Zeichenkette oder Teilzeichenkette zu suchen und auszuwerten:

if grep -R "my-search-string" /my/file.ext
then
    # string exists
else
    # string not found
fi

Sie können auch zuerst testen, ob der Befehl Ergebnisse liefert, indem Sie ihn nur ausführen:

grep -R "my-search-string" /my/file.ext

7voto

David Okwii Punkte 6815
grep -E "(string)" /path/to/file || echo "no match found"

Die Option -E lässt grep reguläre Ausdrücke verwenden

6voto

lecodesportif Punkte 10147

Wenn ich Ihre Frage richtig verstanden habe, sollte dies Ihren Anforderungen genügen.

  1. Sie können das Verzeichnis, das Sie hinzufügen möchten, über die Variable $check angeben
  2. wenn das Verzeichnis bereits in der Liste enthalten ist, lautet die Ausgabe "dir already listed".
  3. wenn das Verzeichnis noch nicht in der Liste enthalten ist, wird es an my_list.txt angehängt

In einer Zeile : check="/tmp/newdirectory"; [[ -n $(grep "^$check\$" my_list.txt) ]] && echo "dir already listed" || echo "$check" >> my_list.txt

5voto

B8ightY Punkte 349

Die Lösung von @Thomas hat bei mir aus irgendeinem Grund nicht funktioniert, aber ich hatte eine längere Zeichenkette mit Sonderzeichen und Leerzeichen, also habe ich die Parameter einfach wie folgt geändert:

if grep -Fxq 'string you want to find' "/path/to/file"; then
    echo "Found"
else
    echo "Not found"
fi

Hoffentlich hilft es jemandem

4voto

gordon Punkte 51

Wenn Sie nur das Vorhandensein einer Zeile prüfen wollen, brauchen Sie keine Datei zu erstellen. z.B.,

if grep -xq "LINE_TO_BE_MATCHED" FILE_TO_LOOK_IN ; then
  # code for if it exists
else
  # code for if it does not exist
fi

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X