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

is it possible to scan a file in reverse (bottom up) using ack?

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

现在我正在使用:

tac 文件名 | grep -m1 blablabla

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

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

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

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

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

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

很遗憾,我目前不知道非交互式解决方案。