2011-09-14 41 views
5

Tôi đang tìm kiếm và tôi không thể tìm thấy câu trả lời mình đang tìm kiếm.Grep cho nhiều mẫu trên nhiều tệp

Nói rằng tôi có một tập tin, text1.txt, trong thư mục mydir có nội dung là:

one 
two 

và khác gọi text2.txt, cũng trong mydir, có nội dung như sau:

two 
three 
four 

Tôi đang cố gắng để có được một danh sách các tập tin (cho một thư mục nhất định) chứa tất cả các mẫu (không phải bất kỳ) nào tôi tìm kiếm. Trong ví dụ tôi cung cấp, tôi đang tìm đầu ra ở đâu đó dọc theo dòng:

./text1.txt 

hoặc

./text1.txt:one 
./text1.txt:two 

Những điều duy nhất mà tôi đã có thể tìm được liên quan phù hợp với bất kỳ mô hình trong một tệp hoặc khớp với nhiều mẫu trong một tệp (mà tôi đã thử mở rộng tới toàn bộ thư mục nhưng đã nhận được lỗi sử dụng grep).

Bất kỳ trợ giúp nào được đánh giá cao.

Sửa-Những điều tôi đã cố gắng

grep "pattern1" < ./* | grep "pattern2" ./* 

"chuyển hướng nhập nhằng"

grep 'pattern1'|'pattern2' ./* 

lợi nhuận file phù hợp với một trong hai mẫu

+0

Thông báo lỗi sử dụng là gì? Và lệnh bạn đã thử là gì? –

Trả lời

8

Một cách có thể là như thế này:

find . | xargs grep 'pattern1' -sl | xargs grep 'pattern2' -sl 
+1

hoặc thay thế này như: 'grep -rl 'pattern1' | xargs grep 'pattern2' -l' –

+0

'grep -rlZ 'pattern1' | xargs --null grep 'pattern2' -l' để an toàn hơn về tên tệp. – Kal

3

Tôi mỏng k này là những gì bạn cần (bạn có thể thêm các mẫu dễ dàng hơn)

grep -EH 'pattern1|pattern2' mydir 
+1

đó là một hoặc, OP muốn một và –

2

Để tinh chỉnh câu trả lời não của:

find . -type f -print0 | xargs -0 grep 'pattern1' -slZ | xargs -0 grep 'pattern2' -sl 

Điều này sẽ giữ grep từ cố gắng để thư mục tìm kiếm, và có thể xử lý đúng đắn tên tập tin với không gian , nếu bạn chuyển cờ -Z tới grep cho tất cả trừ mẫu cuối cùng và chuyển -0 đến xarg.

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