如何在bash脚本中获取文件的第一行?

我必须在文件的第一行放入一个bashvariables。 我想这是与grep命令,但它是任何方式来限制行数?

head从文件中取第一行, -n参数可以用来指定应该提取多less行:

 line=$(head -n 1 filename) 

使用bash读取第一行,使用read语句。 例如

 read -r firstline<file 

firstline行将是你的variables(不需要分配给另一个)

 line=$(head -1 file) 

将工作正常。 (如前面的答案)。 但

 line=$(read -r FIRSTLINE < filename) 

read是一个内置的bash命令将稍微快一点。

这就足够了,并将第一行的filename存储在variables$line

 read -r line < filename 

我也喜欢这个awk

 awk 'NR==1 {print; exit}' file 

要存储行本身,请使用var=$(command)语法。 在这种情况下, line=$(awk 'NR==1 {print; exit}' file)

甚至sed

 sed -n '1p' file 

用等价的line=$(sed -n '1p' file)


当我们用seq 10提供read时,看到一个样本,也就是从1到10的数字序列:

 $ read -r line < <(seq 10) $ echo "$line" 1 $ line=$(awk 'NR==1 {print; exit}' <(seq 10)) $ echo "$line" 1 

这个问题没有问哪个是最快的,但是为了增加sed的答案,-n'1p'performance不佳,因为模式空间仍然在大文件上被扫描。 出于好奇,我发现“头”胜过sed:

 # best: head -n1 $bigfile >/dev/null # a bit slower than head (I saw about 10% difference): sed '1q' $bigfile >/dev/null # VERY slow: sed -n '1p' $bigfile >/dev/null 

只需将源文件的第一个列表echo显到目标文件中。

 echo $(head -n 1 source.txt) > target.txt