Regex 正则表达式:查找不以数字后缀结尾的文件
我需要发出一个命令,返回所有没有数字后缀(*.0,*.123,…)的文件 例如,有三个文件: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]
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