我有以下类型的文件名:
一个以.html
结尾:
l_scheduling_suite.temp.html
另一种类型以.html
结尾,但名称中包含.bin
:
l_scheduling_suite.temp.bin.html
第三个以.bin
:
l_scheduling_suite.temp.bin
文件名是任意的。在temp
或.html
之前,它不一定总是.bin
。我需要找到所有符合第一种格式的文件。我正在使用以下正则表达式来查找文件,但是我无法使其工作:
"(?=(\.html)$) (?=(?!\.bin))"
我应该如何使用grep或find来获取正确的文件列表?
答案 0 :(得分:1)
试试这个:
find -type f | grep -P '^.*(?<!\.bin)\.html$'
这使用负面的背后隐藏。基本上它意味着,获取以.html
结尾的所有名称,但只需确保.bin
不在它之前。
答案 1 :(得分:1)
你的问题非常复杂。您所需要的(基于您发布的语料库)是:
find . -name \*.temp.html
这将找到结束所有.temp.html
的文件。您的其他示例不匹配,因为*.bin.html
和*.temp.bin
与此glob模式没有重叠。
如果您的语料库选择不当,并且您实际上尝试匹配.html
中结束的所有文件,但不包含{{ 1}}在名称的任何地方,你可以使用带有否定的glob的find实用程序,而不需要使用正则表达式,管道,扩展的shell globs或其他扭曲。例如:
.bin