2017-04-06 90 views
0

结束我需要它返回的所有文件,无需数字后缀的命令(* 2.0,* 0.123,...)正则表达式:查找文件不具有数字后缀

例如具有三个文件:

gg.p qqq.449 rtr55 

我想只有这些发现:

./rtr55 
./gg.p 

我试图用grep找到他们。不过,我只得到了没有效果的结果。

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

(此命令返回:)

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

因此,有可能是一些正则表达式格式错误。你知道吗,如何解决它?

+0

尝试'grep -v'\。[0-9] \ + $'' –

回答

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

为什么要使用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 

请注意,这不是纯粹的效率问题; grep根本不会做正确的事情,如果你遇到过带有换行符的文件名。

+0

MacOS上'find'的正则表达式支持不支持'[0-9] +',所以我放了一点繁琐的表情。我想在Linux上你可能会使用plus量词,但注意它不是可移植的。 – tripleee

+0

我试过找到-regex'。* \。[0-9] [0-9] *'-prune -o -type f,但它对数字返回没有影响。此外-regex选项不符合标准。当我将它粘贴到SunOS时,它没有识别-regex选项。 – 8ToThePowerOfMol

+0

已更新为仅使用-name的版本。 – tripleee