gato * | grep algo ... ¿en qué archivo está el resultado?


8

Si uno fuera a ejecutar el siguiente comando

cat * | grep DATABASE

el shell escupiría todas las líneas en los archivos * que contenían la palabra DATABASEen ellos. ¿Hay alguna manera de escupir también de qué archivo está separada cada línea?

Traté de usar la -Hopción para grep que según mandice print the filename for each matchpero en mi shell solo dice

(standard input):$DATABASE_FUNCTION = dothis();

buena pregunta. Todavía estoy tratando de romper el gato -> hábito grep yo mismo. :)
Sirex

Respuestas:


22

No uses gato para eso. En su lugar, use grep DATABASE *o grep -n DATABASE *(si desea conocer los números de línea y los nombres de archivo) directamente.

Ver uso inútil del gato .

Para aclarar un poco más: en cat *realidad concatena todos los archivos a medida que los alimenta para grep a través de la tubería, por lo que grep no tiene forma de saber qué contenido pertenece a qué archivo, y de hecho ni siquiera puede saber si está escaneando archivos o si solo escribiendo poderosamente rápido. Es todo un gran flujo de entrada estándar una vez que usa una tubería.

Por último, -Hes redundante casi con seguridad, ya que grep imprime el nombre de archivo por defecto cuando tiene más de un archivo para buscar. Sin embargo, podría ser útil en caso de que desee analizar la salida, ya que existe la posibilidad de que el *globo se expanda a un solo archivo y grep en ese caso omita el nombre de archivo.


6

Uso grep -H DATABASE *(nota: si hay más de un archivo en el directorio, el -Hes opcional).

El problema que tiene es que con su comando, cat *concatena todos los archivos en un gran desorden y luego los |envía a la entrada estándar de grep DATABASE. Para cuando grep ve los datos, la información sobre su procedencia se habrá perdido. La solución es hacer que grep haga el trabajo de mirar a través de los archivos individuales, para que cuando encuentre una coincidencia sepa de qué archivo proviene.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.