두 패턴(포함) 사이에서 첫 번째 발생을 선택하는 방법. sed
또는 을 사용하는 것이 좋습니다 awk
.
나는 가지고있다:
text
something P1 something
content1
content2
something P2 something
text
something P1 something
content3
content4
something P2 something
text
P1과 P2 사이의 선이 먼저 나타나기를 원합니다(P1 선과 P2 선 포함).
something P1 something
content1
content2
something P2 something
답변1
sed '/P1/,/P2/!d;/P2/q'
...범위의 일부가 아닌 모든 행을 제거한 d
다음 범위의 끝에 처음 도달하면 맞춰 작업을 수행합니다. P1 이전의 P2에서는 실패하지 않으며 간단하게 작성하기 위해 GNU 특정 구문이 필요하지 않습니다.!
q
답변2
존재하다 sed
:
sed -n '/P1/,/P2/p; /P2/q'
-n
기본 인쇄를 억제하고 이p
명령을 사용하여 일치하는 주소 범위 사이의 행을 인쇄합니다.- 일반적으로 이는 두 부분 모두 일치하므로
q
첫 번째 부분이 일치P2
하면 종료()합니다 .
P2
a 가 앞에 오면 실패합니다 P1
. 이 상황을 처리하려면 다음을 시도하십시오.
sed -n '/P1/,/P2/{p; /P2/q}'
답변3
그리고awk
awk '/P1/{a=1};a;/P2/{exit}' file
something P1 something
content1
content2
something P2 something
답변4
awk '/P1/,/P2/{print;f=1} f&&/P2/{exit}' data
인쇄 전이 아닌 인쇄 직후에 종료하십시오.