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

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

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

Exibindo nomes de arquivos com grep

Por padrão, se você passar vários arquivos para grep, eles aparecerão filename: antes da linha correspondente para maior clareza. Na verdade, você pode desabilitar esse comportamento com um -h sinalizador que nunca mostrará nomes de arquivos:

No entanto, se você passar apenas um arquivo para grep, ele não exibirá os nomes dos 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 isso pode interromper a automação ao confiar na presença de um nome de arquivo.

Uma solução simples é usar  -H o sinalizador em maiúsculas, que faz o oposto -h e sempre inclui nomes de arquivos, não importa o que aconteça, mesmo que apenas um arquivo seja passado como entrada.

grep -H "foo"file

Esse -H sinalizador tem outro efeito inesperado, mas útil: quando combinado com input stdin, como pipes Unix, ele será impresso (standard input): no lugar do nome do arquivo.

Exibindo números de linha com grep

Você também pode usá-lo junto com um -n sinalizador para obter o número da linha:

grep -Hn "foo"

Hack compatível com POSIX

O sinalizador -H não é grepcompatível com POSIX e não está disponível em alguns sistemas operacionais obscuros baseados em Unix. Felizmente, há um hack que você pode usar passando /dev/null um segundo arquivo como uma entrada falsa grepque o faz pensar que existem vários arquivos:

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *