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.
-r
obviamente), pero no deberían doler (-a
aunque no lo usaría )grep -m 1
devolvió 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
grep
resultadohead
junto con stdbuf .Tenga en cuenta que para asegurarse de detenerse después de la enésima coincidencia, debe usar
stdbuf
para asegurarse degrep
no almacenar en búfer su salida:Tan pronto como
head
consume 1 línea, finalizó ygrep
recibiráSIGPIPE
porque todavía emite algo a la tubería mientrashead
estaba 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?grep
La--line-buffered
opción no evitaría la sobrecarga del búfer sin llamar a una utilidad adicional?Mi programa grep-a-like
ack
tiene una-1
opción que se detiene en la primera coincidencia encontrada en cualquier lugar. Es compatible con el-m 1
que @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
ag
puede ser rápido, pero no tiene la-1
opció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 -r
funciona mucho más rápido: es la única copia que realiza recorridos de directorio.