小编典典

获取第 n 行 STDOUT 的命令

all

是否有任何 bash 命令可以让您获得 STDOUT 的第 n 行?

也就是说,将采取这种

$ ls -l
-rw-r--r--@ 1 root  wheel my.txt
-rw-r--r--@ 1 root  wheel files.txt
-rw-r--r--@ 1 root  wheel here.txt

并做类似的事情

$ ls -l | magic-command 2
-rw-r--r--@ 1 root  wheel files.txt

我意识到在编写要重用的脚本时这是一种不好的做法,但是在日常使用 shell 时,能够以这种方式过滤我的 STDOUT 对我很有用。

我也意识到这将是一个简单的命令(缓冲 STDOUT,返回特定的行),但我想知道是否有一些 标准 的shell
命令可以执行此操作,而无需我将脚本放置到位。


阅读 63

收藏
2022-05-23

共1个答案

小编典典

使用sed, 只是为了多样化:

ls -l | sed -n 2p

使用这种看起来更有效的替代方法,因为它在打印所需的行时停止读取输入,可能会在馈送过程中生成 SIGPIPE,这反过来可能会生成不需要的错误消息:

ls -l | sed -n -e '2{p;q}'

我经常看到我通常使用第一个(无论如何更容易输入),尽管ls它不是一个在获得 SIGPIPE 时会抱怨的命令。

对于一系列行:

ls -l | sed -n 2,4p

对于几个范围的行:

ls -l | sed -n -e 2,4p -e 20,30p
ls -l | sed -n -e '2,4p;20,30p'
2022-05-23