我需要创建一个命令,返回所有没有数字后缀的文件(* .0,* .123,...)
例如有三个文件:
gg.p qqq.449 rtr55
我只想找到这些:
./rtr55
./gg.p
我试图用grep找到它们。但是我只得到了没有效果的结果。
find -type f | grep -v '\.[0-9]+$'
(此命令返回:)
./qqq.449
./rtr55
./gg.p
因此可能存在一些正则表达式格式错误。你知道吗,怎么解决?
答案 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
根本就不会做正确的事。