find 命令与“正则表达式”匹配不起作用

Ini*_*ian 4 regex unix bash find

我正在尝试与下面的正则表达式做一个简单的文件名匹配,我测试了它的工作page示例文件名ABC_YYYYMMDDHHMMSS.sha1

ABC_20[0-9]{2}(0[1-9]|1[0-2])([0-2][0-9]|3[0-1])([0-2][0-3])([0-5][0-9])([0-5][0-9])\.sha1
Run Code Online (Sandbox Code Playgroud)

当我把它放在喜欢的-regex标志中时find

find . -type f -regex "ABC_20[0-9]{2}(0[1-9]|1[0-2])([0-2][0-9]|3[0-1])([0-2][0-3])([0-5][0-9])([0-5][0-9])\.sha1"
Run Code Online (Sandbox Code Playgroud)

该命令未识别路径中存在的文件(例如ABC_20161231225950.sha1)。我知道很多现有的正则表达式类型page,但我意识到我的类型是posix-extended并尝试如下,

find . -type f -regextype posix-extended -regex 'ABC_20[0-9]{2}(0[1-9]|1[0-2])([0-2][0-9]|3[0-1])([0-2][0-3])([0-5][0-9])([0-5][0-9])\.sha1'
Run Code Online (Sandbox Code Playgroud)

仍然没有结果。我搜索了一些此类类似的问题,但它们涉及提供错误的正则表达式,导致找不到文件。就我而言,虽然发现正则表达式是正确的。我需要知道我在这里错过了什么。也可能在使用-regexin时如何调试不匹配的问题find

注意:- 我可以对正则表达式中的捕获组进行一些优化,但这不在当前问题的范围内。

小智 9

.*在正则表达式的开头添加,因为您总是会得到类似./路径开头的内容

find . -type f -regextype posix-extended -regex '.*ABC_20[0-9]{2}(0[1-9]|1[0-2])([0-2][0-9]|3[0-1])([0-2][0-3])([0-5][0-9])([0-5][0-9])\.sha1'
Run Code Online (Sandbox Code Playgroud)