首页 > 解决方案 > 查找使用带有替代方法的正则表达式

问题描述

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

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

touch a10a a24b b12c a45d

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

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

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

系统:ubuntu 16.04

标签: regexshellfind

解决方案


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

find . -type f -regextype posix-extended -regex '.*/a(10|45).*'

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

-regextype type

更改稍后在命令行上发生的测试-regex和理解的正则表达式语法。-iregex当前实现的类型是emacs(这是默认的)posix-awk、、、posix-basic和。posix-egrepposix-extended


推荐阅读