我必须在文件的第一行中放入一个bash变量。我想它是与grep命令,但它是任何方式来限制行数?
head从文件中提取第一行,而-n参数可用于指定应提取多少行:
head
-n
line=$(head -n 1 filename)
line=$(head -1 file)
会很好。(和前面的答案一样)。但
line=$(read -r FIRSTLINE < filename)
将稍微快一点,因为read是一个内置的bash命令。
read
使用bash读取第一行,使用read语句。如
read -r firstline<file
firstline将是你的变量(不需要赋值给其他变量)
firstline
这就足够了,并将filename的第一行存储在变量$line中:
filename
$line
read -r line < filename
我也喜欢awk:
awk
awk 'NR==1 {print; exit}' file
要存储行本身,使用var=$(command)语法。在这种情况下,line=$(awk 'NR==1 {print; exit}' file)。
var=$(command)
line=$(awk 'NR==1 {print; exit}' file)
甚至sed:
sed
sed -n '1p' file
使用等价的line=$(sed -n '1p' file)。
line=$(sed -n '1p' file)
看一个例子,当我们给read注入seq 10时,也就是一个从1到10的数字序列:
seq 10
$ read -r line < <(seq 10) $ echo "$line" 1 $ line=$(awk 'NR==1 {print; exit}' <(seq 10)) $ echo "$line" 1
这个问题并没有问哪个最快,但是添加到sed的答案中,-n '1p'执行得很差,因为模式空间仍然在大文件上扫描。出于好奇,我发现'head'以微弱优势胜过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
echo $(head -n 1 source.txt) > target.txt
只读取文件的第一行并将其存储到一个变量中:
read var < file echo $var # print only the first line of 'file'