Мне нужно вставить переменную bash в первую строку файла. Я думаю, что это с командой grep, но каким-либо образом можно ограничить количество строк?Как получить первую строку файла в сценарии bash?
ответ
head
занимает первые строки из файла, а параметр -n
может быть использован для определения того, сколько строк должно быть извлечено:
line=$(head -n 1 filename)
line=$(head -1 file)
будет работать нормально. (Как и предыдущий ответ). Но
line=$(read -r FIRSTLINE < filename)
будет немного быстрее, так как read
является встроенной командой Баш.
Второй метод не работает как написанный , потому что 'read' ничего не печатает (поэтому' line' заканчивается пустым), а также выполняется в подоболочке (поэтому 'FIRSTLINE' устанавливается в первую строку, но только в подоболочке, поэтому после этого он недоступен) ,Решение: просто используйте 'read -r line
читать первую строку используя bash, использовать read
заявление. например
read -r firstline<file
firstline
будет переменная (Нет необходимости назначить другой)
, пробовали с' cat ... | прочитайте -r VAR', и он не сработает :( – sorin
Как вы читаете вторую строку? – qed
@sorin, 'cat ... | read VAR' провалится в большинстве оболочек (все, кроме' zsh', насколько я знаю), потому что каждый из компонентов в трубе будет запускаться в отдельных подоболочках. Значение «$ VAR» будет установлено в подоболочке (которое перестанет существовать, как только конвейер завершит выполнение), а не в вызывающей оболочке. с 'read VAR << EOF \ n $ (cat ...) \ nEOF' (где каждая' \ n' является новой строкой). – zrajm
Этого достаточно и сохраняет первую строку 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
' sed '1! D; q'' (или 'sed -n '1p; q'') будет имитировать ваш 'awk' logi c и не допускать дальнейшего чтения в файл. Поскольку мы хотим только первую строку, мы можем поочередно обманывать с помощью 'sed q' или' awk '1; {exit}' 'или даже' grep -m1^'(меньше кода, такой же основной логики). (Это не ответ на запрос downvote.) –
@AdamKatz это очень хороший набор способов, спасибо! Я нахожу, что с «grep» очень умный. Разумеется, мы также можем сказать «head -n 1 file». – fedorqui
Да, 'head -n1' будет быстрее (меньший двоичный файл для загрузки), а' read' будет самым быстрым (нет бинарных файлов для загрузки, это встроенный). Мне особенно нравится «grep -m1 --color.», Когда я просто печатаю первую строку, потому что она тоже окрасит линию, что делает ее отличной для заголовков таблиц. –
вопрос не спросить, какой является самым быстрым, но добавить к ответу 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
Просто echo
первый список вашего исходного файла в целевой файл.
echo $(head -n 1 source.txt) > target.txt
Для чего 'head -n 1 source.txt> target.txt' будет выполняться точно так же. – YoYo
- 1. Как получить первую строку из списка bash?
- 2. Сценарий Bash читает только первую строку файла
- 3. Как я могу написать конкретную строку файла в сценарии bash?
- 4. Как проверить имя файла в сценарии bash?
- 5. Вставить вывод команды bash как первую строку существующего файла?
- 6. Выполнить строку как команду в сценарии Bash
- 7. bash script добавить текст в первую строку файла
- 8. Получить первую строку файла ascii (заголовок) matlab
- 9. Как получить первую букву в переменной Bash?
- 10. Прочитать только первую строку файла?
- 11. Сценарии BASH: выбор файла whiptail
- 12. Добавление кавычек в строку в сценарии bash
- 13. сценарий bash не читает первую строку
- 14. Как получить первую строку из файла в текстовом vb.net
- 15. Как получить первую строку из файла в Scala
- 16. как пропустить первую строку файла в python
- 17. Как развиваться в сценарии bash
- 18. Нужно заменить первую строку на вход пользователя в сценарии оболочки
- 19. Получить только имя файла из пути в сценарии Bash
- 20. Терминал: удалите первую строку файла
- 21. Извлечь первую строку CSV-файла в Pig
- 22. sed regexp в сценарии bash
- 23. Переместить первую строку текстового файла добавить в последнюю строку
- 24. Удалить первую строку текстового файла
- 25. Сценарий Bash, который заменит только первую строку
- 26. Как получить первую строку в абзаце
- 27. Как получить строку текстового файла как различные переменные в bash?
- 28. Как удалить первую строку в CSV-файле
- 29. Удалить первую строку файла, если она пуста
- 30. Как извлечь первую строку из текстового файла?
Значительно больше накладных расходов, чем подход 'read'. '$()' отбрасывает подоболочку и использование внешней команды (* любая * внешняя команда) означает, что вы вызываете 'execve()', вызывая компоновщик и загрузчик (если он использует разделяемые библиотеки, что обычно имеет место) и т. д. –
Это может быть еще короче: 'line =" $ (head -1 FILENAME) "' – nikolay
А также: 'line = \' head -1 FILENAME \ '' –