En su caso, no desea que la computadora trabaje duro ... Pero si es solo un problema de legibilidad humana, puede usarla a lesstravés de una tubería. Eso llenará la pantalla y puede presionar ENTER para ver más líneas y qsalir:grep "SomeText" somefile.csv | less
SilentSteel
Respuestas:
240
La -mopción es probablemente lo que estás buscando:
grep -m 10 PATTERN [FILE]
De man grep:
-m NUM, --max-count=NUM
Stop reading a file after NUM matching lines. If the input is
standard input from a regular file, and NUM matching lines are
output, grep ensures that the standard input is positioned to
just after the last matching line before exiting, regardless of
the presence of trailing context lines. This enables a calling
process to resume a search.
Nota: ¡grep deja de leer el archivo una vez que se ha encontrado el número especificado de coincidencias!
hola lo intentó, básicamente funciona, pero no parece que el grep "pare" de pensar después de encontrar las primeras 10 líneas, parece que continúa pensando y "usando mi CPU" y simplemente no dice que es correcto. thansk
Jas
66
@ Jason: este no parece ser el caso: grep toma 0.005s con -m 1y 1.579s sin en un archivo con 10 millones de líneas en mi computadora portátil.
Grégoire
3
La conexión en tailgeneral generalmente va a funcionar, pero se desglosa particularmente si está trabajando con el contexto, por ejemplo grep -A10 PATTERN, usando tailtrunca el contexto, en lugar de la cantidad de resultados. Esta respuesta fue lo que estaba buscando.
dimo414
1
-m 10¡es la opción que marca la diferencia al agrupar múltiples archivos! La canalización a la cabeza no mostrará coincidencias en los archivos posteriores si hay demasiadas coincidencias en el primer archivo. Gracias !
Julien
1
En mi humilde opinión, esto debe marcarse como la respuesta aceptada, ya que no requiere otra herramienta. Por cierto, es más fácil recordar esta opción cuando se sabe que es el atajo de --max-count
Esto no requerirá buscar en todo el archivo; se detendrá cuando se encuentren las primeras diez líneas coincidentes. Otra ventaja de este enfoque es que no devolverá más de 10 líneas, incluso si está utilizando grep con la opción -o.
Por ejemplo, si el archivo contiene las siguientes líneas:
Tenga en cuenta que no puede usar la | headtubería cuando usa grepcon -Ao -B(y, por lo tanto, no solo busca el resultado ( -o), sino también el contexto). En ese caso, le queda -mdecirle a grep el número de líneas con resultados que se devolverán.
Atila O.
17
El uso de head no impide que grep se ejecute en todo el archivo. Usar la opción -m en grep sí.
LopSae
7
Enfoque Awk:
awk '/pattern/{print; count++; if (count==10) exit}' file
less
través de una tubería. Eso llenará la pantalla y puede presionar ENTER para ver más líneas yq
salir:grep "SomeText" somefile.csv | less
Respuestas:
La
-m
opción es probablemente lo que estás buscando:De
man grep
:Nota: ¡grep deja de leer el archivo una vez que se ha encontrado el número especificado de coincidencias!
fuente
-m 1
y 1.579s sin en un archivo con 10 millones de líneas en mi computadora portátil.tail
general generalmente va a funcionar, pero se desglosa particularmente si está trabajando con el contexto, por ejemplogrep -A10 PATTERN
, usandotail
trunca el contexto, en lugar de la cantidad de resultados. Esta respuesta fue lo que estaba buscando.-m 10
¡es la opción que marca la diferencia al agrupar múltiples archivos! La canalización a la cabeza no mostrará coincidencias en los archivos posteriores si hay demasiadas coincidencias en el primer archivo. Gracias !Otra opción es solo usar head :
Esto no requerirá buscar en todo el archivo; se detendrá cuando se encuentren las primeras diez líneas coincidentes. Otra ventaja de este enfoque es que no devolverá más de 10 líneas, incluso si está utilizando grep con la opción -o.
Por ejemplo, si el archivo contiene las siguientes líneas:
Entonces esta es la diferencia en la salida:
El uso
head
devuelve solo 2 resultados según lo deseado, mientras que -m2 devuelve 3.fuente
| head
tubería cuando usagrep
con-A
o-B
(y, por lo tanto, no solo busca el resultado (-o
), sino también el contexto). En ese caso, le queda-m
decirle a grep el número de líneas con resultados que se devolverán.Enfoque Awk:
fuente
Usando cola:
fuente
Para 2 casos de uso:
grep -m 2
es la ocurrencia máxima por archivo.git grep
lo que no toma-m
Una buena alternativa en estos escenarios es
grep | sed 2q
grep 2 primeras ocurrencias en todos los archivos. documentación de sed: https://www.gnu.org/software/sed/manual/sed.htmlfuente