![match1 앞의 n 줄과 match2까지 match1 뒤의 줄을 인쇄합니다.](https://linux55.com/image/102778/match1%20%EC%95%9E%EC%9D%98%20n%20%EC%A4%84%EA%B3%BC%20match2%EA%B9%8C%EC%A7%80%20match1%20%EB%92%A4%EC%9D%98%20%EC%A4%84%EC%9D%84%20%EC%9D%B8%EC%87%84%ED%95%A9%EB%8B%88%EB%8B%A4..png)
grep -B n -A m match를 사용하여 일치 전후에 n 및 m 줄을 인쇄하는 방법을 알고 있습니다. 또한 sed를 사용하여 match1에서 match2로 인쇄하는 방법도 알고 있습니다. 그러나 이것을 한 줄로 어떻게 결합할 수 있습니까?
> cat file.txt
bar
foo
bar
baz
match1
qux
blah
bleep
match2
boop
blah
n=2에 대한 출력 예:
bar
baz
match1
qux
blah
bleep
match2
답변1
동일한 입력을 공유하도록 명령을 그룹화하여 인계를 grep
종료할 때 다음을 수행하십시오.sed
{ grep -B2 -m1 match1; sed '/match2/q'; } < infile
답변2
명령의 출력을 명령 grep
으로 파이프해 보시겠습니까? sed
예를 들어,
grep <options> file | sed <options>
답변3
sed는 스트림 편집기입니다. 따라서 이전에 사라진 줄을 인쇄하려면 나중에 사용할 수 있도록 버퍼에 저장해야 합니다. 그래서 먼저 버퍼 1{N;N}에 두 줄을 유지하고 N;D 명령으로 유지합니다.
sed -rn '1{:X N;N};
/match1[^\n]*$/{:Y N; /match2[^\n]*$/{p;n;bX}; bY};
N;D' infile