在我的 centOS 中,/log 文件夹中有很多日志文件
/log/log.20120308
/log/log.20120308.1
/log/log.20120308.2
/log/log.20120308.3
/log/log.20120308.error
/log/log.20120308.error.1
显然如果我使用下面的命令
find /log -type f -iregex '.*/'log.20120308'.[0-9]*' -print
我只会得到
/log/log.20120308.1
/log/log.20120308.2
/log/log.20120308.3
我希望有正确的正则表达式来获取下面的列表,但失败了
/log/log.20120308
/log/log.20120308.1
/log/log.20120308.2
/log/log.20120308.3
我无法找出选择扩展名 .1、.2、.3 或空白的正则表达式
答案1
find /log -type f -iregex '.*/'log.20120308'\(\.[0-9]*\)?' -print
表示?
一个或无,并且你应该转义点(在 [0-9] 之前,因为点匹配一切),因此如果您不对点进行转义,/log/log.20120308_1
则如果该文件存在,您也会得到结果。
答案2
一个版本:
find /log -type f -iregex '.*/'log.20120308'[.0-9]*' -print
当然,这也会选择一个名为的文件/log/log.20120308..
,但我不认为这会是一个可能的问题。
另一种方法是使用-o
“或”运算符,并在操作数周围加上转义括号:
find /log -type f \( -iregex '.*/'log.20120308'.[0-9]*' -o -iregex '.*/'log.20120308 \) -print
哦,还有一个关于使用的更新-iregex
:你可以简单地引用一下,因为'.*/log.20120308.[0-9]*'
会选择与'.*/'log.20120308'.[0-9]*'
将其与@md-gao 的建议结合起来,你可以得到这个版本:
find /log -type f -iregex '.*/log.20120308\(\.[0-9]\)?' -print