Пытаясь прочитать номер версии vim, я получаю много дополнительных строк, которые мне нужно игнорировать. Я попытался прочитать руководство headи попробовал следующую команду:
У меня это работает, но, возможно, вы используете версию vim, которая записывает информацию о версии в stderr. Попробуйvim --version 2>&1 | sed 1q
Уильям Перселл
У меня тоже работает - так что да, ваш подход правильный. :)Проверьте, выводит ли ваш пакет эту информацию, stderrпоскольку @WilliamPursell предоставляет проверку.
Да, это один из способов получить первую строку вывода команды.
Если команда выводит что-либо в стандартную ошибку, которую вы хотели бы зафиксировать таким же образом, вам необходимо перенаправить стандартную ошибку команды в стандартный поток вывода:
utility 2>&1 | head -n 1
Есть много других способов захватить первую строку, включая sed 1q(выйти после первой строки), sed -n 1p(печатать только первую строку, но читать все), awk 'FNR == 1'(печатать только первую строку, но снова читать все) и т. Д.
Как указывает @Kusalananda, есть много способов записать первую строку в командной строке, но использование head -n 1может быть не лучшим вариантом при использовании подстановочных знаков, поскольку он будет печатать дополнительную информацию. Изменение 'FNR == i'на 'FNR <= i'позволяет получить первые i строк.
Например, если у вас есть n файлов с именами file_1.txt, ... file_n.txt:
awk 'FNR <= 1' file_*.txt
hello
...
bye
Но с помощью headподстановочных знаков напечатайте имя файла:
vim --version 2>&1 | sed 1q
:)
Проверьте, выводит ли ваш пакет эту информацию,stderr
поскольку @WilliamPursell предоставляет проверку.Ответы:
Да, это один из способов получить первую строку вывода команды.
Если команда выводит что-либо в стандартную ошибку, которую вы хотели бы зафиксировать таким же образом, вам необходимо перенаправить стандартную ошибку команды в стандартный поток вывода:
Есть много других способов захватить первую строку, включая
sed 1q
(выйти после первой строки),sed -n 1p
(печатать только первую строку, но читать все),awk 'FNR == 1'
(печатать только первую строку, но снова читать все) и т. Д.источник
Я хотел бы использовать:
awk 'FNR <= 1' file_*.txt
Как указывает @Kusalananda, есть много способов записать первую строку в командной строке, но использование
head -n 1
может быть не лучшим вариантом при использовании подстановочных знаков, поскольку он будет печатать дополнительную информацию. Изменение'FNR == i'
на'FNR <= i'
позволяет получить первые i строк.Например, если у вас есть n файлов с именами file_1.txt, ... file_n.txt:
awk 'FNR <= 1' file_*.txt hello ... bye
Но с помощью
head
подстановочных знаков напечатайте имя файла:head -1 file_*.txt ==> file_1.csv <== hello ... ==> file_n.csv <== bye
источник
head -qn1 file_*.txt