uso - usar grep
Grep solo el primer partido y parada (4)
Estoy buscando un directorio de forma recursiva utilizando 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
Tal vez grep no es la mejor manera de hacer esto? Dime, muchas gracias.
Mi programa grep-a-like ack
tiene una opción -1
que se detiene en la primera coincidencia encontrada en cualquier lugar. Es compatible con el -m 1
que se refiere @mvp también. Lo puse ahí porque si estoy buscando un árbol grande 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.
Puede canalizar el resultado de grep
para head
junto con stdbuf .
Tenga en cuenta que para garantizar la detención después de la coincidencia Nth, debe usar stdbuf
para asegurarse de que grep
no stdbuf
en búfer su salida:
stdbuf -oL grep -rl ''pattern'' * | head -n1
stdbuf -oL grep -o -a -m 1 -h -r "Pulsanti Operietur" /path/to/dir | head -n1
stdbuf -oL grep -nH -m 1 -R "django.conf.urls.defaults" * | head -n1
Tan pronto como el head
consume 1 línea, finaliza y grep
recibe SIGPIPE
porque aún produce algo en la tubería mientras el head
se fue.
Esto asumió que ningún nombre de archivo contiene nueva línea.
Un solo forro, usando find
:
find -type f -exec grep -lm1 "PATTERN" {} /; -a -quit
-m 1
significa devolver la primera coincidencia en cualquier archivo dado. Pero todavía seguirá buscando en otros archivos. Además, si hay dos o más coincidentes en la misma línea, se mostrarán todos.
Puedes usar head -1
para resolver este problema:
grep -o -a -m 1 -h -r "Pulsanti Operietur" /path/to/dir | head -1