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

时间:2017-04-06 10:12:08

标签: regex shell unix

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

例如有三个文件:

gg.p  qqq.449  rtr55

我只想找到这些:

./rtr55
./gg.p

我试图用grep找到它们。但是我只得到了没有效果的结果。

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

(此命令返回:)

./qqq.449
./rtr55
./gg.p

因此可能存在一些正则表达式格式错误。你知道吗,怎么解决?

2 个答案:

答案 0 :(得分:1)

+运算符属于扩展正则表达式。有很多解决方法:

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]*$'

答案 1 :(得分:0)

为什么你会使用grep

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

如果您的表达式足够简单(或find不支持-regex),则可以使用-name代替-regex,但不能使用glob通配符在点之后捕获任意数量的数字。这是一两个:

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

请注意,这不仅仅是一个效率问题;如果您遇到带有换行符的文件名,grep根本就不会做正确的事。