Мне нужно вставить переменную bash в первую строку файла. Я думаю, что это с командой grep, но каким-либо образом можно ограничить количество строк?
Как получить первую строку файла в bash script?
Ответ 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