对文件进行实时 (e)grepping

对文件进行实时 (e)grepping

大约每周我都需要加载一个包含数百万行的文件并开始对其运行 grep。有些 grep 是正向的,有些是负向的(“-v”标志)。有些是 grep,有些是 egrep。

我今天手动执行此操作 - 运行 grep,将结果保存到文件,然后对此文件运行另一个 grep 并保存到文件 2,然后是文件 3,等等。

是否有某种工具可以让我的生活更轻松,让我可以轻松操作 grep 列表,egreps,该工具将计算并实时显示结果?该工具需要缓存以前的 grep 的结果,以避免每次都重新运行它们。

答案1

我不太清楚你所说的“实时显示结果”是什么意思(但请参阅我答案的结尾以获得一个想法),但一般我会使用制作对于这类任务。例如,给定一个文件源文件.txt我将在其上运行一些 grep,我会将 grep 放在如下 makefile 中:

all: e.out b.out zy.out

single: e.out b.out

e.out: srcfile.txt
    grep e srcfile.txt >e.out

b.out: srcfile.txt
    grep b srcfile.txt >b.out

zy.out: srcfile.txt
    grep zy srcfile.txt >zy.out

...然后我可以运行所有需要更新输出文件的 grep

> make

...我可以使用以下代码运行所有搜索单个字母的 grep

> make single

...等等。在你的情况下,几周后,我想我会很快积累一套制作规则涵盖了我感兴趣的所有(或几乎所有)情况。

您可能能够通过将加载数百万行文件的命令也放入 makefile 中来节省更多时间和精力。

如果使用制作命令没有提供足够的灵活性,您可以根据运行时设置的变量在 make 文件中使用条件制作,例如参见GNU makefile 条件语句教程这篇文章介绍了如何从制作命令行

为了实时显示 grapping 的结果,我倾向于使用尾巴或者较少的按建议这里。困难在于这两种方法每次都只能显示一个文件。我需要更多地了解您对“实时”查看的需求,才能知道这是否令人满意,或者是否需要其他解决方案。

相关内容