grep sem mostrar o caminho / arquivo: linha

234

Como você grep e retorna apenas a linha correspondente? ie O caminho / nome do arquivo é omitido dos resultados.

Nesse caso, desejo procurar em todos os arquivos .bar no diretório atual, procurando o termo FOO

find . -name '*.bar' -exec grep -Hn FOO {} \;
Allan Thomas
fonte

Respostas:

375

Não precisa find. Se você está apenas procurando um padrão em um diretório específico, isso deve ser suficiente:

grep -hn FOO /your/path/*.bar

Onde -hestá o parâmetro para ocultar o nome do arquivo, a partir de man grep:

-h, --no-filename

Suprima a prefixação dos nomes dos arquivos na saída. Esse é o padrão quando há apenas um arquivo (ou apenas entrada padrão) para pesquisar.

Observe que você estava usando

-H, --com o nome do arquivo

Imprima o nome do arquivo para cada correspondência. Esse é o padrão quando há mais de um arquivo para pesquisar.

fedorqui 'Então pare de prejudicar'
fonte
o número da linha pode ser omitido?
javadba 22/03
@ javadba você provavelmente está usando um alias, digite alias grep. Para omitir o alias, digite\grep ...
fedorqui 'SO stop harming'
1
Sim, estava usando o alias.
javadba 22/03
8

Apenas substitua -Hpor -h. Verifique man greppara mais detalhes sobre as opções

find . -name '*.bar' -exec grep -hn FOO {} \;
jkshah
fonte
6

Na página do manual:

-h, --no-filename
    Suppress the prefixing of file names on output. This is the default when there
    is only one file (or only standard input) to search.
TC1
fonte