使用' regex'查找命令匹配不起作用

时间:2016-08-03 11:52:28

标签: regex bash unix 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

当我在-regex的{​​{1}}标志中将其与{/ p>}相联系时

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" )。我知道这个page中的许多现有正则表达式类型,但我意识到我的类型是ABC_20161231225950.sha1并尝试如下,

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' 中使用-regex时如何调试非匹配问题。

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

1 个答案:

答案 0 :(得分:4)

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

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'