如何向此正则表达式添加 Not Exists 子句?

如何向此正则表达式添加 Not Exists 子句?

我正在尝试遍历目录并查找以下两个条件:

  1. 所有以 .js 结尾的文件
  2. 所有以 .js 结尾的文件不是以 _test.js 结尾

我有一个满足上面#1 的正则表达式,如下所示:

find . -iregex '.*\.\(js\)' -printf '"%p",\n'

我正在努力解决如何添加上面#2 的条件。正则表达式是我的薄弱领域,我不确定是否正在查看正确的文档来编写满足这两个条件的正则表达式。

我尝试了以下方法来尝试阻止文件,_test但它不起作用并且仍然返回所有文件:

find . -iregex '.*\.\(js\)' -not -iregex '^(?!.*_test.*$)' -printf '"%p",\n'

我怎样才能修改上面的正则表达式语句来满足第二个要求?

答案1

我真的不明白你的正则表达式,为什么你有所有这些括号和双重否定(-not(?!...))。只要您不启用 PCRE 正则表达式(请参阅-regextype选项),后者就不会起作用。

这个简单的正则表达式可以起作用:

find . -type f -iregex ".*\.js" -not -iregex ".*_test\.js"

但是,对于您的任务,您不需要任何正则表达式,简单的文件名匹配就足够了:

find . -type f -iname "*.js" -not -iname "*_test.js"

相关内容