Tại sao grep đôi khi hiển thị tên tệp, đôi khi không?


8

Ai đó có thể vui lòng giải thích cho tôi tại sao tôi không nhận được đường dẫn đầy đủ trong ví dụ 1 không?

ví dụ 1 - trả về dòng tìm thấy

grep MODIFY /opt/releases/packages/cr_c_cr6/sas/dbms/*/*;
outcome: MODIFY

ví dụ 2 - trả về đường dẫn đầy đủ

grep MODIFY /opt/releases/packages/cr666/sas/dbms/*/*;
/opt/releases/packages/cr666/sas/dbms/sti/FA_DISCLOSURE.ddl:MODIFY QUANTITY NUMBER;

Tôi đã tìm thấy một giải pháp, nhưng tôi muốn hiểu những gì đang xảy ra ở đây. 1 lệnh, kết quả / xử lý khác nhau.


1
đã tìm thấy tùy chọn để sử dụng: -H -H là mặc định khi grepping trên nhiều tệp. Trong trường hợp agrep trên 1 tệp (đó là trường hợp với ví dụ 1), -H không được đặt đúng chỗ.
Marco

Câu trả lời:


13

Trong ví dụ đầu tiên của bạn, toàn cầu phải mở rộng thành một tệp duy nhất. Trong trường hợp đó, grepkhông (theo mặc định) sẽ đặt trước tên tệp.

Ví dụ thứ hai phải được mở rộng thành một số tên tệp và grepthêm vào tên tệp trong trường hợp đó.

Bạn có thể sử dụng -Htùy chọn để luôn lấy tên tệp được thêm vào đầu ra hoặc -hkhông bao giờ lấy tên đó.

Nếu grep của bạn thiếu các tùy chọn này, bạn có thể sử dụng grep REGEX /path/to/pattern/* /dev/nullđể luôn lấy tên tệp (không bao giờ có bất kỳ lần truy cập nào /dev/nullnhưng nó được tính là tên tệp) hoặc cat /path/to/pattern/* | grep REGEXkhông bao giờ lấy tên tệp.

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.