grep 第二次更快

stu*_*ent 6 grep

假设我进行了一次耗时的递归grep搜索。看到结果后,我想要不同的输出;例如,我想-C 3为 3 个上下文行添加选项。添加新选项后,我可以再次进行整个搜索,但我必须像以前一样等待。

有没有什么聪明的方法grep可以更快地执行第二次搜索?

Ulr*_*gel 7

第二次应该已经更快(如果grep是 I/O 绑定),因为文件应该在操作系统的缓存中。

由于grep根本不保存任何状态并且仅使用提供的输入参数,因此无法将先前的结果与grep自身重用。

如果您经常遇到此问题,您可能需要查看桌面搜索引擎或文本索引以改善搜索时间和结果。


rus*_*ush 1

您可以保存匹配文件列表并仅在匹配文件上执行 grep。会快很多。例如,您可以使用find+ grep

find . -type f -exec grep -l 'PATTERN' {} \+ | xargs grep -H -C 3 'PATTERN'
Run Code Online (Sandbox Code Playgroud)

如果您需要grep在第一次运行后查看输出,则find有点困难,但仍然很容易。你只需要使用类似的东西

find -exec grep -H 'PATTERN' {} \+ | tee -a out.log |\
sed 's/^[^:]*://' | sort -u | xargs grep -C 3  'PATTERN'
Run Code Online (Sandbox Code Playgroud)

输出将保存到 out.log 文件中。

  • 没有。您可以在 find 构造的末尾注意到“\+”(代替通常的“\;”)。`\+` 也允许 `find` 每 N 个文件创建一个进程。因此,`find -exec \+` 和 `find | 之间的速度几乎没有差异。xargs`。 (5认同)