2011-02-16 18 views
117

Me gustaría decir 10 líneas como máximo de grep.¿Cómo limito la cantidad de resultados devueltos de grep?

No quiero que mi computadora trabaje duro. Quiero que se detenga después de los 10 resultados encontrados por grep. ¿Es posible?

+0

En el caso de que no desea que el equipo trabaje duro .. Pero si es sólo un problema de legibilidad humana, puede utilizar 'less' a través de una tubería. Eso llenará la pantalla y puede presionar ENTER para ver más líneas y 'q' para salir:' grep '' SomeText '' somefile.csv | menos' – SilentSteel

+2

Es posible que desee cambiar la respuesta aceptada a http://stackoverflow.com/a/5013198/2707864. El que usted aceptó puede no funcionar y/o volverse muy lento (ver los comentarios respectivos). –

Respuesta

168

La opción -m 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 partidos! enfoque

+1

hola lo probé, básicamente funciona, pero no parece que el grep "deje de pensar" después de encontrar las primeras 10 líneas, parece que sigue pensando y "usando mi CPU" y simplemente no está correcto, ¿verdad? thansk – Jas

+4

@Jason: este no parece ser el caso: grep toma 0.005s con '-m 1' y 1.579s sin un archivo con 10 millones de líneas en mi computadora portátil. –

+3

La tubería en "cola" por lo general va a funcionar, pero se rompe especialmente si está cambiando de contexto, p. Ej. 'grep -A10 PATTERN', usando' tail' trunca el contexto, en lugar del número de resultados. Esta respuesta fue lo que estaba buscando. – dimo414

61

Otra opción es sólo con head:

grep ...parameters... yourfile | head 

Esto no requerirá buscar el archivo completo - se detendrá cuando se encuentran las líneas que coincidan primeros diez. Otra ventaja de este enfoque es que devolverá no 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:

112233 
223344 
123123 

Entonces esta es la diferencia en la salida:

 
$ grep -o '1.' yourfile | head -n2 
11 
12 

$ grep -m2 -o '1.' 
11 
12 
12 

Usando head devuelve solamente 2 resultados como se desee, mientras que los rendimientos -m2 3.

+3

Tenga en cuenta que no puede usar el '| head' pipe cuando se usa 'grep' con' -A' o '-B' (y por lo tanto no solo se busca el resultado (' -o'), sino también el contexto). En ese caso, te queda '-m' para decirle a grep el número de líneas con resultados que se devolverán. –

+16

Usar head no impide que grep se ejecute en todo el archivo. Usar la opción -m en grep sí. – LopSae

+0

Esto funciona con git grep, a diferencia de -m. – Iwazaru

6

Awk:

awk '/pattern/{print; count++; if (count==10) exit}' file 
0

El uso de la cola:

#dmesg 
... 
... 
... 
[132059.017752] cfg80211: (57240000 KHz - 65880000 KHz @ 2160000 KHz), (N/A, 4000 mBm) 
[132116.566238] cfg80211: Calling CRDA to update world regulatory domain 
[132116.568939] cfg80211: World regulatory domain updated: 
[132116.568942] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) 
[132116.568944] cfg80211: (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) 
[132116.568945] cfg80211: (2457000 KHz - 2482000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) 
[132116.568947] cfg80211: (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) 
[132116.568948] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) 
[132116.568949] cfg80211: (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) 
[132120.288218] cfg80211: Calling CRDA for country: GB 
[132120.291143] cfg80211: Regulatory domain changed to country: GB 
[132120.291146] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) 
[132120.291148] cfg80211: (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm) 
[132120.291150] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (N/A, 2000 mBm) 
[132120.291152] cfg80211: (5250000 KHz - 5330000 KHz @ 40000 KHz), (N/A, 2000 mBm) 
[132120.291153] cfg80211: (5490000 KHz - 5710000 KHz @ 40000 KHz), (N/A, 2700 mBm) 
[132120.291155] cfg80211: (57240000 KHz - 65880000 KHz @ 2160000 KHz), (N/A, 4000 mBm) 
[email protected]:~/bugs/navencrypt/dev-tools$ dmesg | grep cfg8021 | head 2 
head: cannot open ‘2’ for reading: No such file or directory 
[email protected]:~/bugs/navencrypt/dev-tools$ dmesg | grep cfg8021 | tail -2 
[132120.291153] cfg80211: (5490000 KHz - 5710000 KHz @ 40000 KHz), (N/A, 2700 mBm) 
[132120.291155] cfg80211: (57240000 KHz - 65880000 KHz @ 2160000 KHz), (N/A, 4000 mBm) 
[email protected]:~/bugs/navencrypt/dev-tools$ dmesg | grep cfg8021 | tail -5 
[132120.291148] cfg80211: (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm) 
[132120.291150] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (N/A, 2000 mBm) 
[132120.291152] cfg80211: (5250000 KHz - 5330000 KHz @ 40000 KHz), (N/A, 2000 mBm) 
[132120.291153] cfg80211: (5490000 KHz - 5710000 KHz @ 40000 KHz), (N/A, 2700 mBm) 
[132120.291155] cfg80211: (57240000 KHz - 65880000 KHz @ 2160000 KHz), (N/A, 4000 mBm) 
[email protected]:~/bugs/navencrypt/dev-tools$ dmesg | grep cfg8021 | tail -6 
[132120.291146] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) 
[132120.291148] cfg80211: (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm) 
[132120.291150] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (N/A, 2000 mBm) 
[132120.291152] cfg80211: (5250000 KHz - 5330000 KHz @ 40000 KHz), (N/A, 2000 mBm) 
[132120.291153] cfg80211: (5490000 KHz - 5710000 KHz @ 40000 KHz), (N/A, 2700 mBm) 
[132120.291155] cfg80211: (57240000 KHz - 65880000 KHz @ 2160000 KHz), (N/A, 4000 mBm) 
[email protected]:~/bugs/navencrypt/dev-tools$ 
+0

Puede establecer el "formato del código" haciendo clic en el ícono como "{}" en el editor. – peterh

+0

sería útil proporcionar ejemplos más legibles que loooonl loooog liiines – Putnik

Cuestiones relacionadas