Jak mogę grepować w plikach źródłowych dla jakiegoś tekstu?


8

W tej chwili używam dwóch poleceń, jestem pewien, że musi być lepszy sposób ...

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
nie -name '*.[ch]'działa?
glenn jackman

Odpowiedzi:


10

ack (lub, w Debianie / Ubuntu, ack-grep) zignoruje pliki inne niż źródła, takie jak kontrola wersji lub pliki binarne. Bardzo przydatne.

aby wyszukać tylko pliki .c i .h, jak wyżej:

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

--cc(dłuższa forma jest --type cc) wygląda tylko na .c .h & .xs plików. Pełna lista typów plików jest widoczna w ack-grep --help type. Przez większość czasu nie będzie to szczególnie potrzebne --type, ponieważ zazwyczaj będą zawierały tylko pliki do przeszukania, a następnie pliki domyślnie niewidoczne, takie jak pliki binarne, kopie zapasowe i pliki kontroli wersji.


5

Sam grepprogram może wyszukiwać rekurencyjnie, a także akceptuje opcję wyszukiwania tylko niektórych plików. Poniższe jest równoważne z dwoma findpoleceniami.

grep -Ri --include=*.[ch] invalid\ preset .

To zadziałało, kiedy pozbyłem się nawiasów
Mike

1

Polecenie find może wywołać grep.

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

i ich odmiany.


Zmieniłem to na oczywistą odmianę. ;-)
Keith,

0

Mogę dodać coś takiego do twojego ~/.bashrc

alias cppgrep='grep -Ri "--include=*.[hc]" "--include=*.cpp" "--include=*.hpp"'
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.