¿Por qué grep a veces muestra el nombre del archivo, a veces no?

8

¿Puede alguien explicarme por qué no obtengo la ruta completa en el ejemplo 1?

ejemplo 1 - devolver la línea encontrada

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

ejemplo 2 - regresar ruta completa

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

He encontrado una solución, pero quiero entender lo que está sucediendo aquí. 1 comando, diferente resultado / manejo.

Marco
fuente
1
Ya encontré la opción de usar: -H -H es el valor predeterminado cuando grepping en múltiples archivos. En caso de acuerdo en 1 archivo (que es el caso con el ejemplo 1), -H no está en su lugar.
Marco

Respuestas:

13

En su primer ejemplo, el globo debe haberse expandido a un solo archivo. En ese caso, grepno (por defecto) antepone el nombre del archivo.

El segundo ejemplo debe haberse expandido a varios nombres de archivo, y grepantepone el nombre de archivo en ese caso.

Puede usar la -Hopción para obtener siempre el nombre del archivo antepuesto a la salida, o -hpara nunca obtenerlo.

Si su grep carece de estas opciones, puede usarlo grep REGEX /path/to/pattern/* /dev/nullpara obtener siempre el nombre del archivo (nunca se ingresa /dev/nullpero se cuenta como un nombre de archivo), o cat /path/to/pattern/* | grep REGEXpara nunca obtener un nombre de archivo.

Estera
fuente