¿Cómo puedo grep en archivos de origen para algún texto?

8

En este momento estoy usando dos comandos, estoy seguro de que debe haber una mejor manera ...

wim@wim-acer:~/ffmpeg$ find . -name "*.h" -print0 | xargs -0 grep -i invalid\ preset
wim@wim-acer:~/ffmpeg$ find . -name "*.c" -print0 | xargs -0 grep -i invalid\ preset
wim
fuente
1
hace -name '*.[ch]'el trabajo?
Glenn Jackman

Respuestas:

10

ack (o, en Debian / Ubuntu, ack-grep) ignorará los archivos no fuente como el control de versiones o los binarios. Muy útil.

para buscar solo archivos .c y .h, como arriba:

ack-grep -i --cc "invalid preset"

la --cc(la forma más larga es --type cc) solo mira los archivos .c .h & .xs. La lista completa de tipos de archivo se puede ver con ack-grep --help type. La mayoría de las veces, no necesitará particularmente --type, ya que generalmente solo tendrá los archivos para buscar, y luego los archivos que no verá de forma predeterminada, como archivos binarios, copias de seguridad y archivos de control de versiones.

Alister Bulman
fuente
5

El grepprograma en sí puede buscar de forma recursiva y también acepta una opción para buscar solo ciertos archivos. Lo siguiente es equivalente a sus dos findcomandos.

grep -Ri --include=*.[ch] invalid\ preset .
garyjohn
fuente
Esto funcionó para mí cuando me deshice de los corchetes
Mike
1

El comando find puede llamar a grep.

find . \( -name "*.c" -o -name "*.h" \) -exec grep -i "invalid preset" {} \; -print

y variaciones de los mismos.

Keith
fuente
Lo cambió a la variación obvia. ;-)
Keith
0

Puedo agregar algo como esto a tu ~/.bashrc

alias cppgrep='grep -Ri "--include=*.[hc]" "--include=*.cpp" "--include=*.hpp"'
AlejandroVD
fuente