Mac下find命令-regex与|正则不生效的问题咨询
Mac FreeBSD find 正则语法问题解答
是的,必须添加-E flag才能在Mac的FreeBSD版find中使用(a|b)这类分支匹配的正则语法,原因如下:
- Mac默认自带的是FreeBSD实现的
find,它默认采用基本正则表达式(BRE)。BRE语法里不仅(、)、|需要转义才能生效,更关键的是BRE本身不支持|这种分支匹配逻辑,所以你写的.*\(a\|b\)本质上无法实现“匹配a或b”的效果,自然没有输出。 - 当添加
-E参数后,find会切换为使用扩展正则表达式(ERE),ERE原生支持|分支、()分组这类语法,不需要额外转义(当然转义也不影响),这时候.*(a|b)就能正常匹配文件a和b了。
如果你不想用-E,唯一的替代方案是安装GNU版本的findutils(比如通过Homebrew),GNU find的-regex默认支持ERE语法,但这属于第三方工具,不是系统自带的默认行为。
内容的提问来源于stack exchange,提问作者CAB
相关产品推荐
相关产品推荐

