produza linhas vizinhas com números de linha enquanto faz o grep

produza linhas vizinhas com números de linha enquanto faz o grep

Existe uma maneira de gerar as linhas vizinhas junto com os números das linhas enquanto digita 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, eu sei que posso usar meu padrão com o-n opção e mostrar algumas das linhas vizinhas do número de linha obtido (digamos, usando qualquer um dos métodosaqui), mas existe uma maneira melhor de fazer isso?

Responder1

Você pode usar grepo Context Line Control do GNU, em man grep:

-A NUM, --after-context=NUM
Imprime NUM linhas do contexto final após as linhas correspondentes. Coloca uma linha contendo um separador de grupo (--) entre grupos contíguos de correspondências. Com a opção -o ou --only-matching, isso não tem efeito e um aviso é dado.


-B NUM, --before-context=NUM
Imprime NUM linhas de contexto inicial antes das linhas correspondentes. Coloca uma linha contendo um separador de grupo (--) entre grupos contíguos de correspondências. Com a opção -o ou --only-matching, isso não tem efeito e um aviso é dado.

Se você precisar de um número igual de linhas em ambos os lados, poderá usar um único número de contexto:

-C NUM, -NUM, --context=NUM
Imprime NUM linhas de contexto de saída. Coloca uma linha contendo um separador de grupo (--) entre grupos contíguos de correspondências. Com a opção -o ou --only-matching, isso não tem efeito e um aviso é dado.

Quando combinado com a -nbandeira ( --line-number), você numera as correspondências com o contexto circundante.

No seu exemplo:

grep -n -C1 download

informação relacionada