gera linhas vizinhas com números de linha enquanto grepping

2

Existe uma maneira de imprimir as linhas vizinhas junto com os números de linha enquanto grapping o conteúdo de um arquivo? Estou tentando obter saídas do formulário:

$ ~/myscript.sh download file # 'download' being the pattern here
121: # and downloads with wget/curl, whichever is available.
122: download_file () {
123:  if which wget &>/dev/null; then
----------
356: # Since the prerequisites are already installed, we may proceed
357: download_urls=("http://example.com/foo/bar.bz2"
358:                "http://d1.example.com/xyz/abc.tar.gz"

Claro, sei que posso obter meu padrão grep com a opção -n e mostrar algumas das linhas vizinhas do número de linha obtido (digamos, usando qualquer um dos métodos here ), mas existe uma maneira melhor de fazer isso?

    
por user2064000 05.01.2015 / 07:02

1 resposta

4

Você pode usar o controle de linha de contexto do GNU grep , em man grep :

-A NUM, --after-context=NUM
Print NUM lines of trailing context after matching lines. Places a line containing a group separator (--) between contiguous groups of matches. With the -o or --only-matching option, this has no effect and a warning is given.


-B NUM, --before-context=NUM
Print NUM lines of leading context before matching lines. Places a line containing a group separator (--) between contiguous groups of matches. With the -o or --only-matching option, this has no effect and a warning is given.

Se você precisar de um número igual de linhas nos dois lados, você pode usar um único número de contexto:

-C NUM, -NUM, --context=NUM
Print NUM lines of output context. Places a line containing a group separator (--) between contiguous groups of matches. With the -o or --only-matching option, this has no effect and a warning is given.

Quando combinado com o -n flag ( --line-number ), você tem correspondências numeradas com o contexto adjacente.

No seu exemplo:

grep -n -C1 download
    
por 05.01.2015 / 07:13