是否有任何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命令来执行此操作,而无需我放置脚本。
使用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'
使用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'