假设我进行了一次耗时的递归grep
搜索。看到结果后,我想要不同的输出;例如,我想-C 3
为 3 个上下文行添加选项。添加新选项后,我可以再次进行整个搜索,但我必须像以前一样等待。
有没有什么聪明的方法grep
可以更快地执行第二次搜索?
第二次应该已经更快(如果grep
是 I/O 绑定),因为文件应该在操作系统的缓存中。
由于grep
根本不保存任何状态并且仅使用提供的输入参数,因此无法将先前的结果与grep
自身重用。
如果您经常遇到此问题,您可能需要查看桌面搜索引擎或文本索引以改善搜索时间和结果。
您可以保存匹配文件列表并仅在匹配文件上执行 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 文件中。