Как получить первую строку файла в bash script?

Мне нужно вставить переменную bash в первую строку файла. Я думаю, что это с командой grep, но каким-либо образом можно ограничить количество строк?

Ответ 1

head берет первые строки из файла, а параметр -n может использоваться, чтобы указать, сколько строк должно быть извлечено:

line=$(head -n 1 filename)

Ответ 2

чтобы прочитать первую строку с помощью bash, используйте оператор read. например,

read -r firstline<file

firstline будет вашей переменной (нет необходимости назначать другому)

Ответ 3

line=$(head -1 file)

Будет работать нормально. (Как и предыдущий ответ). Но

line=$(read -r FIRSTLINE < filename)

будет немного быстрее, так как read - это встроенная команда bash.

Ответ 4

Этого достаточно и сохраняет первую строку filename в переменной $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).


См. образец при подаче read с помощью seq 10, то есть последовательности чисел от 1 до 10:

$ read -r line < <(seq 10) 
$ echo "$line"
1

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

Ответ 5

Вопрос не задавался вопросом, который является самым быстрым, но чтобы добавить к sed ответ, -n '1p' плохо работает, поскольку пространство шаблонов все еще сканируется на больших файлах. Из любопытства я обнаружил, что "голова" выигрывает над седлом:

# 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

Ответ 6

Просто echo первый список исходного файла в ваш целевой файл.

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