Imprima n linhas antes de match1 E as linhas depois de match1 até match2

1

Eu sei como usar grep -B n -A m match para imprimir n e m linhas antes e depois de uma partida. Eu também sei como usar sed para imprimir a partir de match1 até match2. Mas como posso combinar isso em uma linha:

> cat file.txt

    bar
    foo
    bar
    baz
    match1
    qux
    blah
    bleep
    match2
    boop
    blah

Exemplo de saída para n = 2:

    bar
    baz
    match1
    qux
    blah
    bleep
    match2
    
por Arash A 11.01.2017 / 02:13

3 respostas

1

Agrupe os comandos, assim eles compartilham a mesma entrada, então quando grep sai sed assume:

{ grep -B2 -m1 match1; sed '/match2/q'; } < infile
    
por 11.01.2017 / 12:33
0

Tente colocar a saída do comando grep no comando sed ? Por exemplo,

grep <options> file | sed <options>
    
por 11.01.2017 / 02:49
0

sed é um editor de fluxo. então se você quiser imprimir as linhas anteriores que já foram, você precisa mantê-las em buffer para uso posterior. então eu primeiro mantenho duas linhas no buffer 1 {N; N} e mantenho com N; D comandos

sed -rn '1{:X N;N}; 
/match1[^\n]*$/{:Y N; /match2[^\n]*$/{p;n;bX}; bY};
N;D' infile
    
por 18.01.2017 / 17:43