Estoy buscando un directorio recursivamente usando grep con los siguientes argumentos con la esperanza de devolver solo la primera coincidencia. Desafortunadamente, devuelve más de uno, de hecho, dos la última vez que miré. Parece que tengo demasiados argumentos, especialmente sin obtener el resultado deseado. : - /
# grep -o -a -m 1 -h -r "Pulsanti Operietur" /path/to/directory
devoluciones:
Pulsanti Operietur
Pulsanti Operietur
¿Quizás grep no es la mejor manera de hacer esto? Dime, muchas gracias.

-robviamente), pero no deberían doler (-aaunque no lo usaría )grep -m 1devolvió ambas instancias debido a esto.|head -1¡resuelto!first not first from result. Esta respuesta imprime la primera coincidencia en cualquier archivo y se detiene. ¿Qué otra cosa esperabas?Puede canalizar el
grepresultadoheadjunto con stdbuf .Tenga en cuenta que para asegurarse de detenerse después de la enésima coincidencia, debe usar
stdbufpara asegurarse degrepno almacenar en búfer su salida:Tan pronto como
headconsume 1 línea, finalizó ygreprecibiráSIGPIPEporque todavía emite algo a la tubería mientrasheadestaba fuera.Esto supone que ningún nombre de archivo contiene nueva línea.
fuente
xargs:find . -name '*.gz' | xargs -I '{}' stdbuf -oL zgrep -al 'pattern' {} | head -n 1. Esto, sin embargo, no termina en el primer partido. ¿Algún consejo?grepLa--line-bufferedopción no evitaría la sobrecarga del búfer sin llamar a una utilidad adicional?Mi programa grep-a-like
acktiene una-1opción que se detiene en la primera coincidencia encontrada en cualquier lugar. Es compatible con el-m 1que @mvp también se refiere. Lo puse allí porque si estoy buscando un gran árbol de código fuente para encontrar algo que sé que existe en un solo archivo, no es necesario encontrarlo y tener que presionar Ctrl-C.fuente
agpuede ser rápido, pero no tiene la-1opción que es útil en este casoPuede usar el siguiente comando si desea imprimir la línea completa y el nombre del archivo si aparece una palabra en particular en el directorio actual que está buscando.
fuente
Un solo revestimiento, utilizando
find:fuente
grep -rfunciona mucho más rápido: es la única copia que realiza recorridos de directorio.