Вопрос:
Мне нужно вставить переменную bash в первую строку файла. Я думаю, что это с командой grep, но каким-либо образом можно ограничить количество строк?
Лучший ответ:
head берет первые строки из файла, а параметр -n может использоваться, чтобы указать, сколько строк должно быть извлечено:
line=$(head -n 1 filename) Ответ №1
чтобы прочитать первую строку с помощью bash, используйте оператор read. например,
read -r firstline<file
firstline будет вашей переменной (нет необходимости назначать другому)
Ответ №2line=$(head -1 file)
Будет работать нормально. (Как и предыдущий ответ). Но
line=$(read -r FIRSTLINE < filename)
будет немного быстрее, так как read – это встроенная команда bash.
Ответ №3
Этого достаточно и сохраняет первую строку 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 Ответ №4
Вопрос не задавался вопросом, который является самым быстрым, но чтобы добавить к 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 Ответ №5
Просто echo первый список исходного файла в ваш целевой файл.
echo $(head -n 1 source.txt) > target.txt