match1 앞의 n 줄과 match2까지 match1 뒤의 줄을 인쇄합니다.

match1 앞의 n 줄과 match2까지 match1 뒤의 줄을 인쇄합니다.

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

관련 정보