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