현재 줄부터 패턴과 일치하지 않는 줄까지 일치

현재 줄부터 패턴과 일치하지 않는 줄까지 일치

정말 검색을 해보았지만 아무것도 찾을 수 없었습니다(정확히 무엇을 검색해야 할지 알기 어렵습니다).

나는 이것을 수행하는 방법을 알고 있습니다 sed. 현재 줄부터 뭔가 일치하는 줄까지 인쇄하십시오.

sed -n '/1/,/SOMETHING/p'

하지만 어떻게 같은 일을 할 수 있지만 현재 줄에서 다음 줄로 인쇄할 수 있습니까?확실히뭔가 일치하나요?

예를 들어 다음과 같이 파이프하십시오 sed.

blah blah SOMETHING blah blah
blah blah SOMETHINGblahblahblah
SOMETHING blah blah
NO MATCH HERE

그런 다음 필터링하여 처음 3줄만 인쇄하려고 합니다(그러나 "3"은 다를 수 있음).

답변1

이는 실제로 원하는 것만큼 일반적이지 않을 수 있지만 시작점은 다음과 같습니다.

 sed -n '/SOMETHING/!q;p'

즉, 와 일치하는지 확인하세요 /SOMETHING/. 만약 라인불일치( !테스트 결과 반전용) 그런 다음 종료합니다. 그렇지 않으면 이 줄을 인쇄하고 다음 줄을 계속 진행하세요.

이는 동일한 명령으로 파일에 대한 다른 작업과 함께 요청한 작업을 즉시 수행할 수 있을 만큼 유연하지 않습니다 sed.

답변2

루핑을 시도해 볼 수 있습니다 sed.

$ sed -n '{:loop p; n; /SOMETHING/b loop; q}' test.txt 
blah blah SOMETHING blah blah
blah blah SOMETHINGblahblahblah
SOMETHING blah blah

이것:

  • :loop라는 파일을 만듭니다.loop
  • p현재 줄을 인쇄하다
  • n다음 행 가져오기
  • /SOMETHING/b looploop행이 일치하면 분기/SOMETHING/
  • q분기가 발생하지 않는 경우.

그럼에도 불구하고 이것은 한 줄을 인쇄합니다. (아마 이 문제는 G-Man의 답변으로 해결될 수 있을 것입니다.)

에서 적응이 문제.

관련 정보