하나의 명령으로 파일의 처음 두 줄(43행과 44행)과 마지막 두 줄을 가져와야 합니다. && 또는; 같은 특수 연산자를 사용하지 않고 헤드, 테일 및 파이프 명령만 사용하여 이를 인쇄할 수 있습니까? 내가 생각할 수 있는 건 이것 뿐이야
(cat cool | head -n 2) | (tail -n +43 | head -n 2) | (tail -n 2)
하지만 고양이가 있어요...또 다른 옵션은
(head -n 2 < cool) | (tail -n +43 < cool | head -n 2) | (tail -n 2 < cool)
하지만 어떤 이유로 마지막 행만 표시됩니다.
답변1
cat cool | head
예이다연합 대학(고양이를 사용하는 것은 쓸모가 없습니다). 두 번째 코드를 확인해 보겠습니다.
(head -n 2 < cool) | (tail -n +43 < cool | head -n 2) | (tail -n 2 < cool)
놀라운 점은 | command < cool
stdin을 두 번 리디렉션한다는 것입니다. 이전 파이프라인 명령의 결과나 파일을 선택해야 합니다 cool
. 둘 다 옵션이 아닙니다.
이제 질문으로 돌아갑니다. 솔루션단일 파일 읽기예:
- 처음 42줄을 읽고 처음 두 줄만 표시하고 다음 40줄을 삭제합니다. 이것은 다음과 같이 번역됩니다
head -n 42 | head -n 2
. - 다음 두 라인(라인 43 및 44)을 표시합니다. 이것은 다음과 같이 번역됩니다
head -n 2
. - 마지막 두 줄을 표시합니다. 이것은 다음과 같이 번역됩니다
tail -n 2
.
이제 이 모든 것을 종합해 보세요.
( head -n 42 | head -n 2; head -n 2; tail -n 2 ) < cool
또 다른 유사한 추론:
( head -n 2; head -n 42 | tail -n 2; tail -n 2 ) < cool
답변2
head
제약 조건은 and 만 사용하므로 tail
단일 명령으로는 요구 사항을 충족할 수 없다고 생각합니다.
# First two lines of the file "cool"
head -n2 cool
# Lines 43 and 44
head -n44 cool | tail -n2
# Last 2 lines
tail -n2 cool
한 줄에 세 개의 명령으로 함께 충돌시킬 수 있지만 "명령"귀하의 질문에 명시된 대로:
head -n2 cool; head -n44 cool | tail -n2; tail -n2 cool
설치된 설명서를 사용하여 및 명령에 대한 이해를 다시 높이고 싶을 수도 있습니다 head
. 및 를 참조하세요.tail
man head
man tail