我尝试使用find
来匹配中间由某些数字表示的几种备用文件模式,但是它返回一个空列表。我的实际模式的开头是固定的,中间是可变的数字。
可复制的示例。创建文件列表
touch a10a a24b b12c a45d
使用以下正则表达式从列表中选择a10a
和a24b
,结果为空
find . -regex '.*/a(10|45).*'
我希望这个问题应该很容易解决,但是我找不到解决方案,也无法解决。我想念什么?
系统:ubuntu 16.04
答案 0 :(得分:3)
这个想法是正确的,但是您需要键入用于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-egrep
和posix-extended
。
答案 1 :(得分:1)
尝试改为指定-regextype awk
:
find . -regextype awk -regex '.*/a(10|45).*'
答案 2 :(得分:-1)
似乎您使用的支架类型错误。它们应该是正方形,而不是圆形。
正确的命令应该是:
find . -regex '.*/a[10|45].*'
希望这会有所帮助!