如何只显示列表的最后一行?

Abd*_*red 13 command-line ls sed awk

假设我列出并按其时间属性对文件进行排序:

ls -ltr

-rwxrwxrwx 1 bla bla 4096 Feb 01 20:10 foo1
-rwxrwxrwx 1 bla bla 4096 Feb 01 20:12 foo2
.
.
.
-rwxrwxrwx 1 bla bla 4096 Mar 05 13:25 foo1000
Run Code Online (Sandbox Code Playgroud)

为了只获得列表的最后一行,我应该在管道链中的 ls -ltr 后面添加什么?我知道有sed和awk,但我不知道如何使用它们,我只知道它们能做什么。

ste*_*ver 27

由于您专门询问了 sed,

ls -ltr | sed '$!d'
Run Code Online (Sandbox Code Playgroud)

  • 此外,`sed -n '$p'` 做同样的事情,但实际上 `tail -1` 是完成这项工作的正确工具。 (6认同)

Ste*_*itt 14

您正在寻找tail

ls -ltr | tail -n 1
Run Code Online (Sandbox Code Playgroud)

这将只显示ls -ltr's 输出的最后一行。您可以通过更改后的值来控制行数-n;如果你-n 1完全省略,你会得到十行。

使用tail而不是的好处sedtail从文件的末尾开始直到它到达换行符,而sed必须遍历整个文件直到它到达末尾,然后才返回自找到最后一个换行符以来的文本。

  • @Barry `tail -1` 已弃用(请参阅 [`tail` 的 POSIX 规范](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/tail.html) 的“基本原理”部分,或者[GNU `tails` 手册的最后一部分](https://www.gnu.org/software/coreutils/manual/html_node/tail-inspiration.html)); 目前,它在这种情况下仍然有效,但最好避免在示例中使用它。 (2认同)

tal*_*zin 5

使用 awk:

ls -ltr | awk 'END { print }'
Run Code Online (Sandbox Code Playgroud)