una texto regulares para palabras palabra linea expresiones exacta egrep contar comando buscar archivos linux grep

linux - texto - grep expresiones regulares



¿Cómo puedo usar grep para mostrar solo nombres de archivos(sin coincidencias en línea) en Linux? (3)

Desde la página del manual de grep(1) :

-l, --files-with-matches Suppress normal output; instead print the name of each input file from which output would normally have been printed. The scanning will stop on the first match. (-l is specified by POSIX.)

¿Cómo puedo usar grep para mostrar solo nombres de archivos (sin coincidencias en línea) en Linux?

Usualmente estoy usando algo como:

find . -iname "*php" -exec grep -H myString {} /;

¿Cómo puedo obtener los nombres de archivo (con rutas), pero sin las coincidencias? ¿Tengo que usar xargs ? No vi una manera de hacer esto en mi página de manual de grep .


La opción estándar grep -l (que es una L minúscula) podría hacer esto.

Desde el estándar de Unix :

-l (The letter ell.) Write only the names of files containing selected lines to standard output. Pathnames are written once per file searched. If the standard input is searched, a pathname of (standard input) will be written, in the POSIX locale. In other locales, standard input may be replaced by something more appropriate in those locales.

Tampoco necesita -H en este caso.


Para una búsqueda simple de archivos, puede usar las opciones -r yr de grep:

grep -rl "mystring"

Toda la búsqueda se realiza por grep. Por supuesto, si necesita seleccionar archivos en algún otro parámetro, encontrar es la solución correcta:

find . -iname "*.php" -execdir grep -l "mystring" {} +

La opción execdir crea cada comando grep para cada directorio y concatena los nombres de archivo en un solo comando ( + ).