【问题标题】:find command with 'regex' match not working查找带有“正则表达式”匹配的命令不起作用
【发布时间】:2016-08-03 11:52:28
【问题描述】:

我正在尝试与下面的正则表达式进行简单的文件名匹配,我测试过该正则表达式正在使用此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

当我将它与find-regex 标志结合起来时,就像

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"

该命令未识别路径中存在的文件(例如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'

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

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

【问题讨论】:

    标签: regex bash unix find


    【解决方案1】:

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

    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'
    

    【讨论】:

    • 啊!它确实有效!不知道我怎么错过了!但在这种情况下,./find 预先添加的路径。有没有比find regex 更好的方法来匹配文件?
    • find 是我所知道的最适合这项工作的工具
    • 所以-regex-iregex 总是在开头暗示^,在结尾暗示$,基本上?
    猜你喜欢
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 2017-04-11
    • 2021-06-23
    • 1970-01-01
    相关资源
    最近更新 更多