我正在尝试查找文件名奇怪的文件。我使用以下命令:
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./_ +@)(&-]'