2009-06-22 23 views
6

Ngay bây giờ tôi làm điều này rất nhiều:Có một số tiện ích của Unix sẽ cho phép tôi grep nhiều tệp với ít lần nhập không?

find * | grep py$ | xargs grep foo 

tôi nhớ lại có một số util mà thực hiện điều này với cách ít đánh máy, nhưng mà?

CẬP NHẬT: Tôi thích sử dụng vỏ Bash nếu có thể.

+1

Tôi thích cách mọi câu trả lời đơn dài hơn OP ... –

+0

Không còn đúng sự thật, may mắn. –

Trả lời

14

Tôi yêu ack:

nào bạn sẽ thay gõ?

$ grep pattern $(find . -type f | grep -v '\.svn')

$ ack pattern

+0

ack --python foo thật ngọt ngào! –

+0

ack là đầu gối ong. – seth

4

Bạn có thể tìm thấy trình bao giúp bạn. Ví dụ, trong zsh, bạn có thể làm

grep foo **/*.py 

cung cấp số lượng file py không vượt quá số lượng tối đa cho phép đối số cho một lệnh (64k?). Lưu ý rằng bạn có thể đủ điều kiện tập tin globbing ví dụ:

grep foo **/*.py(mh-5) 

sẽ cung cấp cho bạn mọi thứ được sửa đổi trong 5 giờ qua.

+0

không tốt hơn, gần bằng cùng số lần nhấn phím; –

+0

Do đó, zsh globbing –

1
grep -r --include='*.py' foo * 
+3

Đó là một định nghĩa kỳ lạ của từ "ít" – skaffman

+0

Vâng. Chaining ít hơn cảm thấy như ít lo lắng cho tôi, nhưng OP đã không yêu cầu ít lo lắng, ông yêu cầu ít gõ. Đã chỉnh sửa một cái gì đó thực sự ngắn hơn. Khinh bỉ. – chaos

1
find . -name "*.py" -exec grep -H foo '{}' ';' 
+3

Mẹo: kết thúc biểu thức exec của bạn bằng dấu '+' thay vì ';', điều này sẽ làm cho tìm thấy gửi tất cả các tệp phù hợp với một quá trình grep duy nhất thay vì tắt một tệp mới cho mỗi tệp phù hợp. Hiệu quả hơn nhiều theo cách đó. –

2

zsh có globbing đệ quy, vì vậy bạn có thể làm

grep foo **/*.py 

Look ma, không tìm thấy :)

UPDATE: Oh, còn nếu bạn làm điều gì đó rất nhiều nó không làm tổn hại đến bí danh hoặc viết một hàm cho nó là tất nhiên

+0

Cho khả năng của zsh để làm điều này, tôi hầu như không phải mess với cú pháp phức tạp của tìm kiếm –

2

Nó được gọi là grep * wink * :-)

Tất cả py trong thư mục hiện

grep -R foo *.py 

Tất cả các tập tin trong hiện tại và bất kỳ thư mục con

grep -R foo . 
+1

+1: -R là tiêu chuẩn trên hầu hết các lệnh UNIX cũng để quét thư mục con đệ quy. – Powerlord

+7

Bạn không cần phải trích dẫn hoặc thoát khỏi globbing của bạn? Nếu không thì shell sẽ mở rộng nó trong thư mục hiện hành? –

+0

Bạn nói đúng về điều đó – jitter

3

Các bạn đã thử ack.

+0

yeah, ack là một sự thay thế tuyệt vời cho grep (ít nhất là cho các lập trình viên) – dfa

0

Tôi sử dụng một cái gì đó rất giống với cặp tìm/grep của bạn rất nhiều, mặc dù với nhiều điều kiện hơn - ngoại trừ các tệp trong thư mục .svn chẳng hạn. Tôi làm điều này rất nhiều Tôi chỉ thực hiện các kịch bản xung quanh những lời gọi này, vì vậy tôi có thể gọi "src-grep ..." và có nó về cơ bản những gì bạn đang làm ở đây. (Sau đó, tôi thêm một phần mở rộng tùy chọn cho một số dòng ngữ cảnh để chuyển đến cờ grep -C, nếu được cung cấp, và một phiên bản riêng biệt để grep kết quả cho các câu lệnh định nghĩa.)

Điều này hữu ích và nhanh hơn đệ quy grep cho tôi.

Các vấn đề liên quan