셸 명령 출력의 첫 줄 가져 오기


96

의 버전 번호를 읽으려고 할 때 vim무시해야 할 추가 행이 많이 표시됩니다. 설명서를 읽고 head다음 명령을 시도했습니다.

vim --version | head -n 1

이것이 올바른 접근 방식인지 알고 싶습니다.


4
어떻게 실패 했습니까? 그것은 나를 위해 작동합니다.
choroba

1
구문이 정확합니다. 오류가 무엇입니까 ..?
Kaushik이 나약

1
그것은 나를 위해 작동하지만 아마도 버전 정보를 stderr에 쓰는 vim 버전을 사용하고있을 것입니다. 시도vim --version 2>&1 | sed 1q
윌리엄 Pursell에게

저에게도 적합합니다. 그래서 예, 귀하의 접근 방식이 정확 합니다. @WilliamPursell이 확인을 제공하므로 :)패키지가 해당 정보를 출력하는지 stderr확인하십시오.
데이비드 C. 순위

답변:


132

예, 이것이 명령에서 출력의 첫 줄을 가져 오는 한 가지 방법입니다.

명령이 동일한 방식으로 캡처하려는 표준 오류를 출력하는 경우 명령의 표준 오류를 표준 출력 스트림으로 리디렉션해야합니다.

utility 2>&1 | head -n 1

sed 1q(첫 번째 줄 이후 종료), sed -n 1p(첫 번째 줄만 인쇄하고 모두 읽기), awk 'FNR == 1'(첫 번째 줄만 인쇄하고 다시 모두 읽기) 등 첫 번째 줄을 캡처하는 다른 방법도 많이 있습니다 .


4

다음을 사용합니다.

awk 'FNR <= 1' file_*.txt

@Kusalananda가 지적했듯이 명령 줄의 첫 번째 줄을 캡처하는 방법은 여러 가지가 있지만 head -n 1와일드 카드를 사용하면 추가 정보를 인쇄하므로를 사용하는 것이 최선의 선택이 아닐 수 있습니다. 변경 'FNR == i'하기 위해서는 'FNR <= i'제 I 라인을 얻을 수있다.

예를 들어, file_1.txt, ... file_n.txt라는 이름의 파일이 n 개있는 경우 :

awk 'FNR <= 1' file_*.txt

hello
...
bye

그러나 head와일드 카드를 사용하면 파일 이름이 인쇄됩니다.

head -1 file_*.txt

==> file_1.csv <==
hello
...
==> file_n.csv <==
bye

1
참조head -qn1 file_*.txt
F. Hauri
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.