Почему grep иногда показывает имя файла, а иногда нет?

8

Может кто-нибудь объяснить мне, почему я не понимаю полный путь в примере 1?

пример 1 - возврат найденной строки

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

пример 2 - возврат полного пути

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

Я нашел решение, но хочу понять, что здесь происходит. 1 команда, другой результат / обработка.

Marco
источник
1
уже найден параметр для использования: -H -H по умолчанию при подборе нескольких файлов. В случае agrep для 1 файла (как в примере 1) -H не на месте.
Марко

Ответы:

13

В первом примере глобус должен быть расширен до одного файла. В этом случае grepне (по умолчанию) не добавляется имя файла.

Во втором примере должно быть расширено до нескольких имен файлов, и grepв этом случае предшествует имя файла.

Вы можете использовать -Hопцию, чтобы всегда получать имя файла, добавленное к выводу, или -hникогда не получать его.

Если у вашего grep нет этих опций, вы можете использовать его, grep REGEX /path/to/pattern/* /dev/nullчтобы всегда получать имя файла (в него никогда не попадало, /dev/nullно оно считается как имя файла), или cat /path/to/pattern/* | grep REGEXчтобы никогда не получить имя файла.

Мат
источник