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