![為什麼符合 grep 模式 '[^a-z0-9\.\/_\-\ +@)(&]' 匹配 '-'](https://rvso.com/image/1636258/%E7%82%BA%E4%BB%80%E9%BA%BC%E7%AC%A6%E5%90%88%20grep%20%E6%A8%A1%E5%BC%8F%20'%5B%5Ea-z0-9%5C.%5C%2F_%5C-%5C%20%2B%40)(%26%5D'%20%E5%8C%B9%E9%85%8D%20'-'.png)
我正在嘗試查找具有可笑文件名的文件。我正在使用這個命令:
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./_ +@)(&-]'