我有以下类型的文件名:
-
一个以
.html
结尾:l_scheduling_suite.temp.html
-
另一种类型以
.html
结尾,但名称中包含.bin
:l_scheduling_suite.temp.bin.html
-
第三个以
.bin
结尾:l_scheduling_suite.temp.bin
文件名是任意的。它不一定总是在.html
或.bin
之前有temp
。我需要找到仅符合第一种格式的所有文件。我正在使用以下正则表达式通过管道连接到 grep 来查找文件,但我无法使其工作:
"(?=(.html)$) (?=(?!.bin))"
我应该如何使用 grep 或查找来获取正确的文件列表?
试试这个:
find -type f | grep -P '^.*(?<!.bin).html$'
这使用负回头看。基本上,这意味着,获取所有以 .html
结尾的名称,但只需确保.bin
不在它之前。
使用简单的 glob 模式
你把问题复杂化得太复杂了。您所需要的(基于您发布的语料库)是:
find . -name *.temp.html
这将找到所有以 .temp.html
结尾的文件。您的其他示例不匹配,因为*.bin.html
和*.temp.bin
与此 glob 模式没有重叠。
使用否定的球
体如果你的语料库选择不当,并且你实际上试图匹配所有以.html
结尾但名称中不包含.bin
的文件,那么你只需将 find 实用程序与否定的 glob 一起使用,而无需诉诸正则表达式、管道、扩展的 shell glob 或其他扭曲。例如:
find . -name '*.html' -not -name '*.bin*'