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.

4voto

Rudy Punkte 6710

Meine Version mit fgrep

  FOUND=`fgrep -c "FOUND" $VALIDATION_FILE`
  if [ $FOUND -eq 0 ]; then
    echo "Not able to find"
  else
    echo "able to find"     
  fi

2voto

jns Punkte 1030

Ich habe nach einer Möglichkeit gesucht, dies im Terminal zu tun und die Zeilen mit dem normalen "grep-Verhalten" zu filtern. Haben Sie Ihre Zeichenketten in einer Datei strings.txt :

string1
string2
...

Dann können Sie einen regulären Ausdruck erstellen wie (string1|string2|...) und verwenden Sie es zum Filtern:

cmd1 | grep -P "($(cat strings.txt | tr '\n' '|' | head -c -1))" | cmd2

Bearbeiten: Das obige Beispiel funktioniert nur, wenn Sie keine Regex-Zeichen verwenden; wenn Escaping erforderlich ist, könnte es so gemacht werden:

cat strings.txt | python3 -c "import re, sys; [sys.stdout.write(re.escape(line[:-1]) + '\n') for line in sys.stdin]" | ...

1voto

AndrewD Punkte 4319

Eine grep-lose Lösung, funktioniert für mich:

MY_LIST=$( cat /path/to/my_list.txt )

if [[ "${MY_LIST}" == *"${NEW_DIRECTORY_NAME}"* ]]; then
  echo "It's there!"
else
echo "its not there"
fi

basierend auf: https://stackoverflow.com/a/229606/3306354

1voto

Shinoy Shaji Punkte 397
grep -Fxq "String to be found" | ls -a
  • grep hilft Ihnen, den Inhalt zu überprüfen
  • ls wird alle Dateien auflisten

1voto

Diego Torres Milano Punkte 60646

Ähnlich wie die anderen Antworten, aber keine Gabelung cat und Einträge können Leerzeichen enthalten

contains() {
    [[ " ${list[@]} " =~ " ${1} " ]] && echo 'contains' || echo 'does not contain'
}

IFS=$'\r\n' list=($(<my_list.txt))

also für eine my_list.txt wie

/tmp
/var/tmp
/Users/usr/dir with spaces

diese Tests

contains '/tmp'
contains '/bin'
contains '/var/tmp'
contains '/Users/usr/dir with spaces'
contains 'dir with spaces'

return

exists
does not exist
exists
exists
does not exist

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