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

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

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

나는 이 작업을 수행하는 방법을 알고 있습니다 sed. 현재 줄부터 SOMETHING과 일치하는 줄까지 인쇄합니다.

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의 답변으로 수정될 수 있습니다.)

에서 적응이 SO 질문.

관련 정보