mèo * | grep một cái gì đó mà tập tin là kết quả trong?


8

Nếu ai đó chạy lệnh sau

cat * | grep DATABASE

shell sẽ nhổ ra tất cả các dòng trong * tệp có chứa từ DATABASEđó. Có cách nào để nhổ những tập tin mà mỗi dòng là ngoài?

Tôi đã cố gắng sử dụng -Htùy chọn cho grep mà theo như mannói print the filename for each matchnhưng trong vỏ của tôi, nó chỉ nói

(standard input):$DATABASE_FUNCTION = dothis();

câu hỏi hay. Tôi vẫn đang cố gắng phá vỡ con mèo -> grep thói quen bản thân mình. :)
Sirex

Câu trả lời:


22

Đừng dùng con mèo cho việc đó. Thay vào đó hãy sử dụng grep DATABASE *hoặc grep -n DATABASE *(nếu bạn muốn biết trực tiếp số dòng cũng như tên tệp).

Thấy dùng mèo vô dụng .

Để làm rõ hơn một chút: cat *thực sự nối tất cả các tệp khi nó cung cấp cho chúng để grep qua đường ống, vì vậy grep không có cách nào biết nội dung nào thuộc về tệp nào và thực sự thậm chí không thể biết đó là quét tệp hay bạn chỉ cần gõ mạnh mẽ nhanh chóng. Đó là tất cả một luồng đầu vào tiêu chuẩn lớn khi bạn sử dụng đường ống.

Cuối cùng, -Hchắc chắn là không cần thiết vì grep in tên tệp theo mặc định khi nó có nhiều hơn một tệp để tìm kiếm. Tuy nhiên, nó có thể được sử dụng trong trường hợp bạn muốn phân tích đầu ra, vì có khả năng toàn *cầu sẽ mở rộng thành một tệp duy nhất và trong trường hợp đó grep sẽ bỏ qua tên tệp.


6

Sử dụng grep -H DATABASE *(lưu ý: nếu có nhiều hơn một tệp trong thư mục, thì đó -Hlà tùy chọn).

Vấn đề bạn gặp phải là với lệnh của bạn, cat *ghép tất cả các tệp lại với nhau thành một mớ hỗn độn lớn, sau đó |gửi nó vào đầu vào tiêu chuẩn của grep DATABASE. Vào thời điểm grep nhìn thấy dữ liệu, thông tin về nơi nó đến đã bị mất. Giải pháp là để grep thực hiện công việc xem qua các tệp riêng lẻ, vì vậy khi tìm thấy kết quả khớp, nó biết tệp đó đến từ đâu.

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.