Como usar o grep para exibir nomes de arquivos e números de linha antes de combinar as linhas

0
29


grep é um utilitário Linux comumente usado para pesquisar o conteúdo do arquivo ou qualquer entrada passada para ele. Ao pesquisar vários arquivos, é útil exibir o nome do arquivo e os números de linha, especialmente quando usado para automatizar scripts de shell.

mostrar nomes de arquivos com grep

Por padrão, se você passar vários arquivos para grepserá mostrado filename: antes da linha correspondente para maior clareza. Na verdade, você pode desabilitar esse comportamento com o -h flag, que nunca exibirá nomes de arquivos:

No entanto, se você passar apenas um arquivo para grep, ele não exibirá nomes de arquivos por padrão. Isso pode ser um problema ao automatizar com scripts de shell, pois você pode não saber quantos arquivos estão em um diretório e pode interromper a automação dependendo do nome do arquivo que está lá.

a a solução simples é usar maiúsculas -H bandeiraque faz o contrário de -h e ele sempre disparará nomes de arquivos, não importa o que aconteça, mesmo com apenas um arquivo passado como entrada.

grep -H "foo" file

a -H sinalizador tem outro efeito inesperado, mas útil: quando combinado com a entrada de stdincomo tubos unix, ele imprimirá (standard input): em vez do nome do arquivo.

Mostrar números de linha com grep

Você também pode usá-lo em conjunto com o -n flag para obter o número da linha:

grep -Hn "foo"

Um hack compatível com POSIX

a -H bandeira acesa grep não é compatível com POSIX e não está disponível em alguns sistemas operacionais baseados em Unix mais obscuros. Felizmente, há um truque que você pode usar, passando /dev/null como uma segunda entrada de arquivo falsa para grepque o leva a pensar que existem vários arquivos: