![Warum stimmt das Grep-Muster '[^a-z0-9\.\/_\-\ +@)(&]' mit '-' überein?](https://rvso.com/image/1636258/Warum%20stimmt%20das%20Grep-Muster%20'%5B%5Ea-z0-9%5C.%5C%2F_%5C-%5C%20%2B%40)(%26%5D'%20mit%20'-'%20%C3%BCberein%3F.png)
Ich versuche, Dateien mit absurden Dateinamen zu finden. Ich verwende diesen Befehl:
find . -type f | egrep -i '[^a-z0-9\.\/_\-\ +@)(&]'
aber ich bin ein bisschen sprachlos, weil es mit Dateinamen übereinstimmt, die das Minuszeichen '-' enthalten. Warum? Und wie kann ich das beheben?
Bearbeiten: Vorgehensweise zum reproduzieren Überprüfen dieses Verhaltens:
Ich habe eine Testdatei mit dem Namen „Testfile“ erstellt, die nur ein Minuszeichen enthält
$ hexdump -C testfile
00000000 2d |-|
egrep -i '[^a-z0-9\.\/_\-\ +@)(&]' testfile
entspricht diesem Minuszeichen.
Antwort1
Der Bindestrich hat in einer Zeichenklasse eine besondere Bedeutung, er bezeichnet einen Zeichenbereich.
Setzen Sie den Bindestrich am Ende der Zeichenklasse und entfernen Sie unnötige Escape-Zeichen:
find . -type f | egrep -i '[^a-z0-9./_ +@)(&-]'