다음과 같은 파일이 있습니다.
A
B
C
D
E
F
2호선부터 4호선까지 사용할 수 있어요sed -n 2,4p
2~4를 제외한 모든 행을 어떻게 얻을 수 있나요?
답변1
귀하의 예제 명령은 귀하가 원하는 것과 정반대입니다. 매뉴얼 페이지를 읽고 처리된 모든 행을 인쇄하는 -n
비활성화 sed
된 기본 동작을 확인하십시오. 행 인쇄를 비활성화한 다음 범위에 있는 행만 명시적으로 인쇄합니다 2,4
.
한 가지 해결책은 기본 행 인쇄를 활성화하지만 sed
범위 내의 행을 삭제하도록 지시하는 것입니다.
$ sed 2,4d << EOF
> A
B
C
D
E
F
> EOF
A
E
F
답변2
함수 앞에는
!
문자가 올 수 있으며, 이 경우 주소가 패턴 공간을 선택하지 않는 경우 해당 함수를 적용해야 합니다.
(원천)
귀하의 경우 함수는 p
이고 주소는 입니다 2,4
.
sed -n '2,4!p'
(아포스트로피!
쉘에 특별한 상황이 있는 경우.)
답변3
IMHO awk 구문은 기본 수학이므로 더 간단합니다.
$ awk '(2 <= NR) && (NR <= 4)' file
B
C
D
$ awk '(NR < 2) || (4 < NR)' file
A
E
F
sed와 마찬가지로 awk에서도 범위 표현식을 작성할 수 있지만 반드시 awk에서 작성할 필요는 없으므로 명확성, 유지 관리성 등의 이유로 작성하지 않는 것이 좋습니다.
답변4
awk '!(NR>=2 && NR<=4)' filename
산출
A
E
F