為什麼符合 grep 模式 '[^a-z0-9\.\/_\-\ +@)(&]' 匹配 '-'

為什麼符合 grep 模式 '[^a-z0-9\.\/_\-\ +@)(&]' 匹配 '-'

我正在嘗試查找具有可笑文件名的文件。我正在使用這個命令:

find . -type f | egrep -i '[^a-z0-9\.\/_\-\ +@)(&]'

但我有點目瞪口呆,因為它匹配包含減號字元“-”的檔案名稱。為什麼?以及如何解決這個問題?

編輯:可重複驗證此行為的過程:

我建立了一個名為 testfile 的測試文件,只包含一個減號

$ hexdump -C testfile

00000000  2d                                                |-|
egrep -i '[^a-z0-9\.\/_\-\ +@)(&]' testfile

匹配這個減號。

答案1

連字符在字符類別中具有特殊含義,它表示字符的範圍。

將連字符放在字元類別的末尾,並刪除無用的轉義:

find . -type f | egrep -i '[^a-z0-9./_ +@)(&-]'

相關內容