获取shell命令输出的第一行

时间:2017-09-03 09:20:13

标签: linux bash shell

在尝试读取vim的版本号时,我得到了许多额外的行,我需要忽略它们。我试着阅读head的手册并尝试了以下命令:

vim --version | head -n 1

我想知道这是否是正确的做法?

2 个答案:

答案 0 :(得分:65)

是的,这是从命令获取第一行输出的一种方法。

如果命令输出任何您希望以相同方式捕获的标准错误,则需要将命令的标准错误重定向到标准输出流:

utility 2>&1 | head -n 1

还有许多其他方法可以捕获第一行,包括sed 1q(在第一行之后退出),sed -n 1p(仅打印第一行,但只读取所有内容),awk 'FNR == 1'(只打印第一行,但再次读取所有内容)等。

答案 1 :(得分:2)

我会使用:

awk 'FNR <= 1' file_*.txt

@Kusalananda指出,有很多方法可以捕获命令行的第一行,但是使用head -n 1可能不是使用通配符的最佳选择,因为它会打印其他信息。将'FNR == i'更改为'FNR <= i'可以获取前i行。

例如,如果您有n个名为file_1.txt的文件,... file_n.txt:

awk 'FNR <= 1' file_*.txt

hello
...
bye

但是使用head通配符可以打印文件名:

head -1 file_*.txt

==> file_1.csv <==
hello
...
==> file_n.csv <==
bye