获取 shell 命令输出的第一行

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

vim --version | head -n 1

我想知道这是不是正确的方法?

196662 次浏览

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

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

utility 2>&1 | head -n 1

还有很多其他的方法来捕捉第一行,包括 sed 1q(第一行后退出) ,sed -n 1p(只打印第一行,但读取所有内容) ,awk 'FNR == 1'(只打印第一行,但再次读取所有内容)等。

我会用:

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