Por que grep às vezes mostra o nome do arquivo, às vezes não?

8

Alguém pode me explicar por que não obtenho o caminho completo no exemplo 1?

exemplo 1 - retornando linha encontrada

grep MODIFY /opt/releases/packages/cr_c_cr6/sas/dbms/*/*;
outcome: MODIFY

exemplo 2 - retornando caminho completo

grep MODIFY /opt/releases/packages/cr666/sas/dbms/*/*;
/opt/releases/packages/cr666/sas/dbms/sti/FA_DISCLOSURE.ddl:MODIFY QUANTITY NUMBER;

Eu encontrei uma solução, mas quero entender o que está acontecendo aqui. 1 comando, resultado / manuseio diferentes.

Marco
fonte
1
já encontrou a opção de usar: -H -H é o padrão ao grepping em vários arquivos. No caso de concordar com 1 arquivo (que é o caso do exemplo 1), o -H não está no lugar.
Marco

Respostas:

13

No seu primeiro exemplo, a glob deve ter se expandido para um único arquivo. Nesse caso, grep(por padrão) não precede o nome do arquivo.

O segundo exemplo deve ter se expandido para vários nomes de arquivos e grep, antes disso, precede o nome do arquivo.

Você pode usar a -Hopção para sempre obter o nome do arquivo anexado à saída ou -hnunca para obtê-lo.

Se o seu grep não possui essas opções, você pode grep REGEX /path/to/pattern/* /dev/nullsempre usar o nome do arquivo (nunca há nenhum acerto, /dev/nullmas ele conta como um nome de arquivo) ou cat /path/to/pattern/* | grep REGEXnunca obter um nome de arquivo.

Esteira
fonte