Làm cách nào tôi có thể grep trong tệp nguồn cho một số văn bản?


8

Hiện tại tôi đang sử dụng hai lệnh, tôi chắc chắn phải có cách tốt hơn ...

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
không -name '*.[ch]'làm việc
glenn jackman

Câu trả lời:


10

ack (hoặc, trên Debian / Ubuntu, ack-grep) sẽ bỏ qua các tệp không nguồn như kiểm soát phiên bản hoặc nhị phân. Rất hữu ích.

để tìm kiếm các tập tin .c và .h, như trên:

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

các --cc(hình thức còn là --type cc) chỉ nhìn .h & .xs file .c. Danh sách đầy đủ của filetypes có thể xem được với ack-grep --help type. Hầu hết thời gian, bạn sẽ không cần đặc biệt --type, vì thông thường sẽ chỉ có các tệp để tìm kiếm, và sau đó các tệp bạn sẽ không thấy theo mặc định, như tệp nhị phân, bản sao lưu và tệp kiểm soát phiên bản.


5

Bản grepthân chương trình có thể tìm kiếm đệ quy và cũng chấp nhận một tùy chọn để chỉ tìm kiếm một số tệp nhất định. Sau đây là tương đương với hai findlệnh của bạn .

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

Điều này làm việc cho tôi khi tôi thoát khỏi dấu ngoặc
Mike

1

Lệnh find có thể gọi grep chính nó.

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

và các biến thể của chúng.


Thay đổi nó để biến thể rõ ràng. ;-)
Keith

0

Tôi có thể thêm một cái gì đó như thế này vào của bạn ~/.bashrc

alias cppgrep='grep -Ri "--include=*.[hc]" "--include=*.cpp" "--include=*.hpp"'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.