정말 검색을 해보았지만 아무것도 찾을 수 없었습니다(정확히 무엇을 검색해야 할지 알기 어렵습니다).
나는 이것을 수행하는 방법을 알고 있습니다 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 loop
loop
행이 일치하면 분기/SOMETHING/
q
분기가 발생하지 않는 경우.
그럼에도 불구하고 이것은 한 줄을 인쇄합니다. (아마 이 문제는 G-Man의 답변으로 해결될 수 있을 것입니다.)
에서 적응이 문제.