适用于 JavaScript 的正则表达式不适用于 bash

Regex which works in JavaScript not working in bash

我正在编写一个脚本来删除 iOS 设备上某些不需要的图像;以下是正则表达式将针对的文件名的一些示例。

./Black_0_WifiBars.png
./Black_0_WifiBars@2x.png
./Black_0_WifiBars@3x.png

我有一个正则表达式,我试图用它来匹配不以 @2x.png 或 @3x.png: .*/\w*(?!@[23]x)\.png 结尾的 png 文件。当我在 http://regexpal.com/ 等测试站点中有上述示例和上述正则表达式时,这会起作用并匹配第一个示例。但是,当我尝试在 bash 中使用它时,像这样:

find . -regex ".*/\w*(?\!@[23]x)\.png"

它不会给出任何结果,即使在应该匹配的文件存在的目录中也是如此。

我格式化正则表达式的方式有问题吗? bash 不支持我在其中使用的内容吗? (我在 OS X 10.10.1)。

如果您的文件名不包含@,否则,您可以使用:

find . -regex '.*/[^@]*\.png'

-regex之前使用-not作为参数并消除负前瞻:

find . -not -regex ".*@[23]x\.png"