Como posso grep nos arquivos de origem para algum texto?

8

No momento estou usando dois comandos, tenho certeza que deve haver uma maneira melhor ...

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
    
por wim 25.08.2011 / 10:11

4 respostas

10

ack (ou, no Debian / Ubuntu, ack-grep) irá ignorar arquivos que não são de origem, como controle de versão ou binários. Muito útil.

para pesquisar apenas arquivos .c e .h, como acima:

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

o --cc (a forma mais longa é --type cc ) só parece em .c .h & arquivos .xs. A lista completa de tipos de arquivos é visível com ack-grep --help type . Na maioria das vezes, você não precisará do --type , pois geralmente ele terá apenas os arquivos a serem pesquisados e os arquivos que você não verá por padrão, como binários, backups e arquivos de controle de versão.

    
por 25.08.2011 / 10:16
4

O programa grep pode pesquisar recursivamente e também aceita uma opção para pesquisar apenas determinados arquivos. O seguinte é equivalente aos seus dois comandos find .

grep -Ri --include=*.[ch] invalid\ preset .
    
por 25.08.2011 / 17:48
1

O comando find pode chamar o próprio grep.

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

e suas variações.

    
por 25.08.2011 / 10:31
0

Posso adicionar algo assim ao seu ~/.bashrc

alias cppgrep='grep -Ri "--include=*.[hc]" "--include=*.cpp" "--include=*.hpp"'
    
por 05.06.2018 / 15:59