sed, 컨텍스트 주소 범위에 대해 동일한 동작이 있습니까?

sed, 컨텍스트 주소 범위에 대해 동일한 동작이 있습니까?

다음 명령은 예상대로 작동합니다. 사례 1, 2:

$ printf "a\nb\nc\n" | sed -n '/a/ p'
a

$ printf "a\nb\na\n" | sed -n '/a/,/a/ p'
a
b
a

하지만 다음 명령은 "a"에만 일치할 것으로 예상했는데 두 주소 범위 모두에 대한 레코드 정의를 이해할 수 없습니다.

상황 3, 4:

$ printf "a\nb\nc\n" | sed -n '/a/,/a/ p'
a
b
c

$ printf "a\nb\nc\n" | sed -n '/b/,/b/ p'
b
c

누구든지 이 정의의 동작을 더 자세히 설명할 수 있습니까?

SED Command: [addr[,addr]f[args]

$명 sed

"... 두 번째 주소가 컨텍스트 주소인 경우 sed는 첫 번째 주소와 일치하는 패턴 공간에 두 번째 주소를 다시 일치시키지 않습니다. 선택한 범위 이후 첫 번째 줄부터 sed가 시작됩니다. 첫 번째 주소 찾기를 다시 시작합니다. ..."

감사해요

답변1

중요한 부분은 다음과 같습니다.

sed는 두 번째 주소를 첫 번째 주소와 일치하는 패턴 공간과 다시 일치시키지 않습니다.

인용문의 마지막 부분은 다소 혼란스럽습니다.내가 가지고 있는 맨페이지:

주소 범위에 대해 주의할 세 가지 사항: 구문은 다음과 같습니다 addr1,addr2(즉, 주소는 쉼표로 구분됩니다). 이전 줄이 선택 addr1 되더라도 일치하는 줄에 대해 테스트 되지 않습니다 .addr2addr2addr1

마지막 "참고"는 현재 보고 있는 동작을 설명합니다. 당신이 달릴 때

printf "a\nb\nc\n" | sed -n '/a/,/a/ p'

sed일치 하고 다시 일치할 /a/때까지 패턴 공간을 계속 복사합니다 ./a/다른 회선에서, 이런 일은 절대 일어나지 않을 것입니다.

관련 정보