Warum zeigt grep manchmal den Dateinamen an, manchmal nicht?

8

Kann mir bitte jemand erklären, warum ich in Beispiel 1 nicht den vollständigen Pfad erhalte?

Beispiel 1 - Gefundene Zeile zurückgeben

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

Beispiel 2 - Rückkehr zum vollständigen Pfad

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

Ich habe eine Lösung gefunden, möchte aber verstehen, was hier passiert. 1 Befehl, unterschiedliches Ergebnis / Behandlung.

Marco
quelle
1
Die Option zur Verwendung wurde bereits gefunden: -H -H ist die Standardeinstellung beim Greifen nach mehreren Dateien. Im Falle der Zustimmung zu 1 Datei (was bei Beispiel 1 der Fall ist) ist das -H nicht vorhanden.
Marco

Antworten:

13

In Ihrem ersten Beispiel muss der Glob zu einer einzelnen Datei erweitert worden sein. In diesem Fall wird grepder Dateiname nicht (standardmäßig) vorangestellt.

Das zweite Beispiel muss auf mehrere Dateinamen erweitert worden sein und grepstellt in diesem Fall den Dateinamen voran.

Sie können die -HOption verwenden, um den Dateinamen immer vor die Ausgabe zu stellen oder -hum ihn nie abzurufen.

Wenn Ihrem grep diese Optionen fehlen, können Sie verwenden, grep REGEX /path/to/pattern/* /dev/nullum immer den Dateinamen abzurufen (es gibt keinen Treffer, /dev/nullaber er zählt als Dateiname) oder cat /path/to/pattern/* | grep REGEXum nie einen Dateinamen abzurufen.

Matte
quelle