Làm cách nào để trả về cả tên tệp và số dòng với find -exec grep?


45

Khi sử dụng find, làm cách nào để trả về tên tệp và số dòng khi tìm kiếm chuỗi? Tôi quản lý để trả về tên tệp trong một lệnh và số dòng với một lệnh khác, nhưng dường như tôi không thể kết hợp chúng.

Tên tệp: find . -type f -exec grep -l 'string to search' {} \;

Số dòng: find . -type f -exec grep -n 'string to search' {} \;

Câu trả lời:


51

Công tắc dòng lệnh -Hbuộc grepphải in tên tệp, thậm chí chỉ với một tệp.

% grep -n 7 test.in
7:7
% grep -Hn 7 test.in
test.in:7:7

   -H, --with-filename
          Print the filename for each match.

Lưu ý rằng như Kojiro nói trong một nhận xét , đây không phải là một phần của tiêu chuẩn POSIX; nó có trong cả GNU và BSD grep, nhưng có thể một số hệ thống không có nó (ví dụ Solaris).


4
Câu trả lời này có thể được cải thiện bằng cách chỉ ra rằng -Hcờ grepphần mở rộng GNU không chuẩn và đưa ra một cách tiếp cận khác cho các hệ thống không phải GNU.
kojiro


-1

Nếu grep của bạn hỗ trợ -rcờ đệ quy , điều này sẽ giải quyết yêu cầu của bạn:

grep -rn "String to search " * 

1
Điều đó đúng, nhưng tôi không thấy điều này thêm vào câu trả lời hiện có.
tự đại diện

Và nếu chỉ có một tệp (không phải dấu chấm) trong thư mục hiện tại, thì tệp này sẽ không hiển thị tên của tệp.
G-Man nói 'Phục hồi Monica'
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.