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

8

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

exemplo 1 - retornando a 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;

Encontrei uma solução, mas quero entender o que está acontecendo aqui. 1 comando, resultado / manipulação diferente.

    
por Marco 09.12.2013 / 14:53

1 resposta

14

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

O segundo exemplo deve ter sido expandido para vários nomes de arquivos, e grep prefixará o nome do arquivo nesse caso.

Você pode usar a opção -H para sempre colocar o nome do arquivo na saída, ou -h para nunca obter o nome.

Se o seu grep não tiver essas opções, você pode usar grep REGEX /path/to/pattern/* /dev/null para obter sempre o nome do arquivo (nunca há nenhum hit em /dev/null , mas conta como um nome de arquivo) ou cat /path/to/pattern/* | grep REGEX para nunca obter um nome de arquivo. / p>     

por 09.12.2013 / 15:10