【问题标题】:Find using regex with altenatives查找使用正则表达式和替代方法
【发布时间】:2019-01-17 23:18:42
【问题描述】:

我尝试使用find 来匹配由中间某些数字表示的几个替代文件模式,但它返回一个空列表。我的实际模式有一个固定的开头和中间的可变数字。

可重现的示例。创建文件列表

touch a10a a24b b12c a45d

使用以下正则表达式从列表中选择 a10aa24b 导致空输出

find . -regex '.*/a(10|45).*'

我希望这个问题应该很容易解决,但我找不到解决方案,也无法弄清楚。我错过了什么?

系统:ubuntu 16.04

【问题讨论】:

    标签: regex shell find


    【解决方案1】:

    这个想法是对的,但是您需要输入用于find 的正则表达式。由于您在此处有备用运算符|,因此您需要启用 ERE(扩展正则表达式)支持,您可以执行以下操作。 -regextype 允许您指定需求所需的正则表达式风格。如果您启用了贪婪匹配.*

    ,那么/ 部分也是可选的
    find . -type f -regextype posix-extended -regex '.*/a(10|45).*'
    

    在我的 GNU findutils 版本中,您可以从 man 页面看到

    -regextype type

    更改-regex-iregex 测试所理解的正则表达式语法,这些测试稍后会在命令行中出现。当前实现的类型有emacs(这是默认值)、posix-awkposix-basicposix-egrepposix-extended

    【讨论】:

      【解决方案2】:

      尝试指定-regextype awk

      find . -regextype awk -regex '.*/a(10|45).*'
      

      【讨论】:

        【解决方案3】:

        您似乎使用了错误类型的括号。它们应该是方形的,而不是圆形的。

        正确的命令应该是:

        find . -regex '.*/a[10|45].*'
        

        希望这会有所帮助!

        【讨论】:

          猜你喜欢
          • 2020-04-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多