Pourquoi grep affiche-t-il parfois le nom du fichier, parfois non?

8

Quelqu'un peut-il m'expliquer pourquoi je n'obtiens pas le chemin complet dans l'exemple 1?

exemple 1 - retour d'une ligne trouvée

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

exemple 2 - retour du chemin complet

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

J'ai trouvé une solution, mais je veux comprendre ce qui se passe ici. 1 commande, résultat / traitement différent.

Marco
la source
1
déjà trouvé l'option à utiliser: -H -H est la valeur par défaut lors de la grepping sur plusieurs fichiers. En cas d'accord sur 1 fichier (ce qui est le cas avec l'exemple 1) le -H n'est pas en place.
Marco

Réponses:

13

Dans votre premier exemple, le glob doit avoir été développé en un seul fichier. Dans ce cas, le greppréfixe (par défaut) ne précède pas le nom du fichier.

Le deuxième exemple doit avoir été étendu à plusieurs noms de fichier et grepajoute le nom de fichier dans ce cas.

Vous pouvez utiliser l' -Hoption pour toujours obtenir le nom de fichier ajouté à la sortie, ou -hpour ne jamais l'obtenir.

Si votre grep n'a pas ces options, vous pouvez utiliser grep REGEX /path/to/pattern/* /dev/nullpour toujours obtenir le nom de fichier (il n'y a jamais de hit /dev/nullmais il compte comme nom de fichier), ou cat /path/to/pattern/* | grep REGEXpour ne jamais obtenir de nom de fichier.

Tapis
la source