Pregunta ¿Cómo grep recursivo?


Cómo hago recursivamente grep todos los directorios y subdirectorios?

find . | xargs grep "texthere" *

1347
2018-01-01 05:10


origen


Respuestas:


grep -r "texthere" .

El primer parámetro representa la expresión regular para buscar, mientras que el segundo representa el directorio que debe buscarse. En este caso, . significa el directorio actual.

Nota: Esto funciona para GNU grep, y en algunas plataformas como Solaris debe usar específicamente grep GNU en lugar de implementación heredada. Para Solaris este es el ggrep mando.


2030
2018-01-01 05:11



Si conoce la extensión o el patrón del archivo que le gustaría, otro método es usar --include opción:

grep -r --include "*.txt" texthere .

También puede mencionar los archivos para excluir con --exclude.

Ag

Si busca con frecuencia a través del código, Ag (El Buscador de Plata) es una alternativa mucho más rápida que grep, que está personalizada para buscar código. Por ejemplo, es recursivo por defecto e ignora automáticamente los archivos y directorios listados en .gitignore, por lo que no tiene que seguir pasando las mismas opciones incómodas de exclusión para grep o find.


568
2017-12-30 22:59



También:

find ./ -type f -print0 | xargs -0 grep "foo"

pero grep -r es una mejor respuesta.


106
2018-01-01 05:14



Ahora siempre uso (incluso en Windows con GoW - Gnu en Windows)

grep --include="*.xxx" -nRHI "my Text to grep" *

Eso incluye las siguientes opciones:

--include=PATTERN

Recurse en los directorios solo buscando búsqueda de archivos PATTERN.

-n, --line-number

Prefija cada línea de salida con el número de línea dentro de su archivo de entrada.

-R, -r, --recursive

Lea todos los archivos debajo de cada directorio, recursivamente; esto es equivalente a -d recurse opción.

-H, --with-filename

Imprime el nombre del archivo para cada coincidencia.

-I     

Procesar un archivo binario como si no contuviera datos coincidentes;
  esto es equivalente a --binary-files=without-match opción.

Y puedo agregar 'i'(-nRHIi), si quiero resultados que no distingan entre mayúsculas y minúsculas.

Puedo conseguir:

/home/vonc/gitpoc/passenger/gitlist/github #grep --include="*.php" -nRHI "hidden" *
src/GitList/Application.php:43:            'git.hidden'      => $config->get('git', 'hidden') ? $config->get('git', 'hidden') : array(),
src/GitList/Provider/GitServiceProvider.php:21:            $options['hidden'] = $app['git.hidden'];
tests/InterfaceTest.php:32:        $options['hidden'] = array(self::$tmpdir . '/hiddenrepo');
vendor/klaussilveira/gitter/lib/Gitter/Client.php:20:    protected $hidden;
vendor/klaussilveira/gitter/lib/Gitter/Client.php:170:     * Get hidden repository list
vendor/klaussilveira/gitter/lib/Gitter/Client.php:176:        return $this->hidden;
...

83
2018-02-14 09:33



O instala ack, si quieres una forma mucho más rápida y estás haciendo esto mucho.


53
2018-01-01 05:47



En sistemas POSIX, no encuentras -r parámetro para grep y tu grep -rn "stuff" . no se ejecutará, pero si usa find ordenar lo hará:

find . -type f -exec grep -n "stuff" {} \; -print

De acuerdo por Solaris y HP-UX.


19
2017-08-08 14:56



Para encontrar el nombre de files con path recursivamente conteniendo el particular string use el comando debajo para UNIX:

find . | xargs grep "searched-string"

para Linux:

grep -r "searched-string" .

encontrar un archivo en UNIX servidor

find . -type f -name file_name

encontrar un archivo en el servidor LINUX

find . -name file_name

10
2018-01-29 14:31



ag es mi forma favorita de hacer esto ahora github.com/ggreer/the_silver_searcher . Básicamente es lo mismo que ack, pero con algunas optimizaciones más.

Aquí hay un punto de referencia corto. Borro el caché antes de cada prueba (cf https://askubuntu.com/questions/155768/how-do-i-clean-or-disable-the-memory-cache )

ryan@3G08$ sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
3
ryan@3G08$ time grep -r "hey ya" .

real    0m9.458s
user    0m0.368s
sys 0m3.788s
ryan@3G08:$ sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
3
ryan@3G08$ time ack-grep "hey ya" .

real    0m6.296s
user    0m0.716s
sys 0m1.056s
ryan@3G08$ sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
3
ryan@3G08$ time ag "hey ya" .

real    0m5.641s
user    0m0.356s
sys 0m3.444s
ryan@3G08$ time ag "hey ya" . #test without first clearing cache

real    0m0.154s
user    0m0.224s
sys 0m0.172s

8
2018-05-21 23:37