如何无格式grep列出包含所有几个字符串的文件的名称和另外几个字符串的{NES}

时间:2017-11-29 21:20:53

标签: performance search grep

我经常要生成一个包含文件的列表 规定的条件。

假设我想找到所有具有版权和主要文件的文件 不使用fcntl或命名空间。

这是一种笨拙的方法:

fgrep -i -r -l copyright *|xargs fgrep -i -l main|xargs fgrep -i -l -v fcntl|xargs fgrep -i -l namespace

有没有人知道如何使用标准实用程序采用更复杂的方法来实现相同的结果?

为了好玩,我已经开始编写自己的C ++ 17程序以获得快速的结果,但我很想找到自己不必要的工作。这是我的GitHub存储库,包含该代码:

https://github.com/jlettvin/Greased-Grep

1 个答案:

答案 0 :(得分:2)

使用(GNU)grep,我会这样做:

grep -Flir 'main' . \
    | xargs grep -Fli 'copyright' \
    | xargs grep -FLi -e 'fcntl' -e 'namespace'

这与你所拥有的非常相似。要获取包含模式的文件,我使用-L选项(您尝试-lv - 返回包含至少一行不匹配的文件,即通常所有文件。)

对于最后一步,排除不匹配的文件,我只能使用一个grep调用和-e指定的多个模式。

为了使其更加健壮并允许文件名中的任何字符,您可以要求grep将文件名与NUL字节(-Z)和期望的{x {1}隔离开来。{{1} }):

-0