查找将正则表达式与替代品一起使用

时间:2018-08-10 10:49:17

标签: regex shell find

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

可复制的示例。创建文件列表

touch a10a a24b b12c a45d

使用以下正则表达式从列表中选择a10aa24b,结果为空

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

我希望这个问题应该很容易解决,但是我找不到解决方案,也无法解决。我想念什么?

系统:ubuntu 16.04

3 个答案:

答案 0 :(得分:3)

这个想法是正确的,但是您需要键入用于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

答案 1 :(得分:1)

尝试改为指定-regextype awk

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

答案 2 :(得分:-1)

似乎您使用的支架类型错误。它们应该是正方形,而不是圆形。

正确的命令应该是:

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

希望这会有所帮助!