Regex 正则表达式:查找不以数字后缀结尾的文件

Regex 正则表达式:查找不以数字后缀结尾的文件,regex,shell,unix,Regex,Shell,Unix,我需要发出一个命令,返回所有没有数字后缀(*.0,*.123,…)的文件 例如,有三个文件: gg.p qqq.449 rtr55 我只想找到这些: ./rtr55 ./gg.p 我试着用grep找到他们。然而,我只得到了结果,没有任何效果 find -type f | grep -v '\.[0-9]+$' (此命令返回:) 所以可能有一些正则表达式格式错误。您知道如何修复它吗?操作符属于扩展正则表达式。有许多变通办法: find -type f | grep -v '\.[0-9]

我需要发出一个命令,返回所有没有数字后缀(*.0,*.123,…)的文件

例如,有三个文件:

gg.p  qqq.449  rtr55
我只想找到这些:

./rtr55
./gg.p
我试着用grep找到他们。然而,我只得到了结果,没有任何效果

find -type f | grep -v '\.[0-9]+$'
(此命令返回:)


所以可能有一些正则表达式格式错误。您知道如何修复它吗?

操作符属于扩展正则表达式。有许多变通办法:

find -type f | grep -v '\.[0-9]\+$'
find -type f | egrep -v '\.[0-9]+$'
find -type f | grep -E -v '\.[0-9]+$'
find -type f | grep -v '\.[0-9][0-9]*$'

为什么要使用
grep

find -regex '.*\.[0-9][0-9]*' -prune -o -type f
如果表达式足够简单(或者您的
find
不支持
-regex
),则可以使用
-name
而不是
-regex
,但全局通配符不能捕获点后任意数量的数字。这里有一两个:

find -name '*.[0-9]' -prune -o -name '*.[0-9][0-9]' -prune -o -type f

请注意,这不仅仅是一个效率问题<如果你遇到文件名中有换行符,那么code>grep就不会做正确的事情。

试试
grep-v'\.[0-9]\+$”
MacOS上的
find
中的regex支持不支持
[0-9]+
,所以我加入了一个稍微麻烦一点的表达式。我想在Linux上您可能可以使用加号量词,但请注意它不可移植。我尝试了find-regex.*\.[0-9][0-9]*.-prune-o-type f,但它对数字返回没有影响。此外,正则表达式选项可能不符合标准。当我将它粘贴到SunOS上时,它不识别-regex选项。更新的版本只使用-name。
find -name '*.[0-9]' -prune -o -name '*.[0-9][0-9]' -prune -o -type f