¿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

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.


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 .

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.


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"'
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.