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



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

现在我正在使用:

tac文件名|grep-m1 blablabla

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

如果不可能做到以上几点,那么做这种搜索的更有效方法是什么?(从文件底部开始查找模式的第一个匹配项)

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

你的命令行可能是你能做的最好的。我不知道ack有任何选项可以为你做反向行迭代,但即使有,它只会比让像tac这样的专用程序处理它稍微高效一些(区别来自于文件I/O本身,而不是第二个进程的开销和设置管道的进程间通信)。

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

  1. most my_big_file
  2. B跳到文件末尾
  3. shift-/以向后模式进行搜索,并搜索您想要的内容-它将返回文件中的最后一个条目,而不会像tac那样缓慢地缓冲整个条目

不幸的是,我目前还不知道非交互式解决方案。

最新更新