
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 grep
o 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 -n
bandeira ( --line-number
), você numera as correspondências com o contexto circundante.
No seu exemplo:
grep -n -C1 download