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.
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.
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]" | ...
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
Ä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 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.