Намагаючись прочитати номер версії vim, я отримую багато додаткових рядків, які мені потрібно ігнорувати. Я спробував прочитати керівництво headта спробував наступну команду:
vim --version | head -n 1
Я хочу знати, чи це правильний підхід?
Намагаючись прочитати номер версії vim, я отримую багато додаткових рядків, які мені потрібно ігнорувати. Я спробував прочитати керівництво headта спробував наступну команду:
vim --version | head -n 1
Я хочу знати, чи це правильний підхід?
vim --version 2>&1 | sed 1q
:)Перевірте, чи виводить ваш пакет таку інформацію stderrяк @WilliamPursell, перевірку.
Відповіді:
Так, це один із способів отримати перший рядок результату від команди.
Якщо команда видає що-небудь до стандартної помилки, яку ви хотіли б зафіксувати таким же чином, вам потрібно перенаправити стандартну помилку команди на стандартний вихідний потік:
utility 2>&1 | head -n 1
Є також багато інших способів захопити перший рядок, у тому числі 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