grep: Sempre mostra o contexto de N linhas

1

Dado um arquivo como

asdasd
123
X
456
X
789
asd
asd
asd
asd

Se eu executo o grep: grep -C3 'X' no acima, recebo os seguintes resultados

asdasd
123
X
456
--
456
X
789
asd
asd

Parece que o grep mostra apenas o contexto de cada correspondência até a correspondência anterior ou posterior. Existe uma maneira de obtê-lo para exibir todo o contexto, independentemente de o padrão estar contido nele? Olhando para man grep , parece não haver tal opção. O resultado esperado é o seguinte:

asdasd
123
X
456
X
789
--
123
X
456
X
789
asd
asd
    
por kanghj91 20.11.2018 / 09:57

1 resposta

0

Aqui está um pequeno script em perl para fazer isso. Ele lê todo o arquivo na memória, portanto pode não ser apropriado para arquivos realmente grandes.

perl -0777 -snE '
    @lines = split /\n/;
    for $idx (grep {$lines[$_] =~ $p} 0...$#lines) {
        say join "\n", @lines[$idx-($n-1) .. $idx+($n-1)], "--";
    }
' -- -n=3 -p='X' file
    
por 20.11.2018 / 16:00

Tags