是否可以使用ack反向扫描文件(自下而上)?

时间:2015-04-23 02:01:58

标签: bash search grep debian ack

是否可以使用ack(grep替代品)以反向(自下而上)扫描文件中的图案?

现在我正在使用:

tac filename | grep -m1 blablabla

但是一位朋友提到ack可以在不使用tac的情况下做这种事情。我查看了man文件,找不到任何提及此功能的内容(或许我只是愚蠢而且错过了它)。

如果无法执行上述操作,那么进行此类搜索的更有效方法是什么? (找到从文件底部开始的模式的第一个匹配项)

2 个答案:

答案 0 :(得分:1)

由于文件存储在磁盘上的方式,以这种面向反向的方式读取文件总是效率低下。文件只是一个线性字节流,可以从文件开头的偏移量访问。一条线不是一个独特的对象;相反,它是由传统字节(或字节对)定义的抽象,称为行结束。第一行是从文件开头到第一行结束的所有内容,第二行是第一行结束到第二行结束之后的所有内容,依此类推。为了反向访问这些行,你仍然需要从头开始扫描整个文件,甚至找到最后一行。

您拥有的命令行可能与您一样好。我不知道ack会为你做反向行迭代的任何选项,但即使这样做,它只会比让像tac这样的专用程序处理得更有效率它(差异来自于执行文件I / O本身,而不是具有第二个进程的开销并设置管道的进程间通信)。

答案 1 :(得分:1)

这仅在您以交互方式工作时才有用,但most(寻呼机)具有反向搜索功能,可以非常快速地获取大文件中的最后一个条目。用法:

  1. most my_big_file
  2. B跳至文件末尾
  3. shift-/以向后搜索模式,并搜索您想要的内容 - 它将返回文件中的最后一个条目,而不会像使用tac那样缓慢缓存整个内容。
  4. 不幸的是,我目前还没有发现非交互式解决方案。