2012-09-10 48 views
6

Làm cách nào để lệnh grep định vị các từ nhất định trong các tệp được chỉ định bởi các tuyến được tìm thấy bởi lệnh xác định vị trí?Sử dụng lệnh grep và xác định vị trí

locate my.cnf | grep user 

(Tôi muốn grep rằng lệnh tìm kiếm từ "người sử dụng" trên các tập tin tìm thấy cho vị trí chỉ huy)

Trả lời

10

Thay vì một sự thay thế lệnh ống, sử dụng:

grep user `locate my.cnf` 
+0

Tôi thích cái này tốt hơn so với phương pháp 'xargs' bên dưới vì nó duy trì điểm nổi bật của grep –

+0

@moeso: Bạn có thể lấy grep để luôn cho đầu ra màu với' --color = always'. – cha0site

0

lẽ grep user $(locate my.cnf) là những gì bạn đang tìm kiếm, nếu tôi hiểu câu hỏi của bạn một cách chính xác.

+3

Lưu ý rằng thao tác này sẽ bị lỗi và ghi nếu lệnh 'locate' đó trả về quá nhiều dữ liệu. Kích thước dòng lệnh không phải là vô hạn. – cha0site

10

Hãy thử:

locate my.cnf | xargs grep user 
+0

Tùy chọn này đúng, nhưng Matt đã trả lời trước và nó hoạt động. Cảm ơn. – Jhonathan

+2

@ Jhonathan - nếu kết quả là khá nhỏ, các tác phẩm của matt. Nếu kết quả có thể tùy ý lớn, bạn nên chọn 'xargs'. –

0

Để chơi đẹp với các tình huống khi xác định kết quả có khoảng trống trong tên, bạn có thể làm

này
locate -0 my.cnf | xargs -n1 -0 grep user 
+0

Hiển thị cùng một đầu ra ba lần – Jhonathan

+0

Không có bất kỳ công tắc nào 'grep' tự động xuất tất cả các dòng khớp (tệp của bạn có thể có nhiều dòng khớp). Nếu bạn muốn hiển thị số dòng ở phía trước chúng, bạn có thể sử dụng công tắc '-n' cho grep. Nếu không, bạn chỉ có thể xuất kết quả đầu tiên cho mỗi tệp bằng '-m 1' hoặc chỉ tên của tệp phù hợp với' -l'. –

+0

Bạn có lý do. Lấy làm tiếc, – Jhonathan

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