x에서 y까지를 제외한 모든 행 가져오기

x에서 y까지를 제외한 모든 행 가져오기

다음과 같은 파일이 있습니다.

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

관련 정보