我怎样才能找到以" .html"结尾的文件,但没有" .bin"文件名中的任何位置?

时间:2016-02-22 17:45:40

标签: regex linux grep find filenames

我有以下类型的文件名:

  1. 一个以.html结尾:

    l_scheduling_suite.temp.html
    
  2. 另一种类型以.html结尾,但名称中包含.bin

    l_scheduling_suite.temp.bin.html
    
  3. 第三个以.bin

    结尾
    l_scheduling_suite.temp.bin
    
  4. 文件名是任意的。在temp.html之前,它不一定总是.bin。我需要找到所有符合第一种格式的文件。我正在使用以下正则表达式来查找文件,但是我无法使其工作:

    "(?=(\.html)$) (?=(?!\.bin))"
    

    我应该如何使用grep或find来获取正确的文件列表?

2 个答案:

答案 0 :(得分:1)

试试这个:

find -type f | grep -P '^.*(?<!\.bin)\.html$'

这使用负面的背后隐藏。基本上它意味着,获取以.html结尾的所有名称,但只需确保.bin不在它之前。

答案 1 :(得分:1)

使用简单Glob模式

你的问题非常复杂。您所需要的(基于您发布的语料库)是:

find . -name \*.temp.html

这将找到结束所有.temp.html的文件。您的其他示例不匹配,因为*.bin.html*.temp.bin与此glob模式没有重叠。

使用否定球体

如果您的语料库选择不当,并且您实际上尝试匹配.html结束的所有文件,但包含{{ 1}}在名称的任何地方,你可以使用带有否定的glob的find实用程序,而不需要使用正则表达式,管道,扩展的shell globs或其他扭曲。例如:

.bin