Hãy xem xét các tập tin đầu vào sau đây:
1
2
3
4
Đang chạy
{ grep -q 2; cat; } < infile
không in bất cứ điều gì. Tôi hy vọng nó sẽ được in
3
4
Tôi có thể nhận được đầu ra dự kiến nếu tôi thay đổi nó thành
{ sed -n 2q; cat; } < infile
Tại sao lệnh đầu tiên không in đầu ra dự kiến?
Đây là một tệp đầu vào có thể tìm kiếm và theo tiêu chuẩn trong TÙY CHỌN :
-q
Quiet. Nothing shall be written to the standard output, regardless of
matching lines. Exit with zero status if an input line is selected.
và xa hơn nữa, dưới mục SỬ DỤNG ỨNG DỤNG (nhấn mạnh của tôi):
Các
-qtùy chọn cung cấp một phương tiện để dễ dàng xác định có hay không một mô hình (hoặc chuỗi) tồn tại trong một nhóm các tập tin. Khi tìm kiếm một số tệp, nó cung cấp một cải tiến hiệu suất ( vì nó có thể thoát ngay khi tìm thấy kết quả khớp đầu tiên ) [...]
Bây giờ, theo cùng một tiêu chuẩn (trong phần Giới thiệu , trong INPUT PHIM )
Khi tiện ích tiêu chuẩn đọc tệp đầu vào có thể tìm kiếm và chấm dứt mà không có lỗi trước khi đến cuối tệp, tiện ích phải đảm bảo rằng tệp bù trong mô tả tệp mở được đặt đúng vị trí vừa qua byte cuối được xử lý bởi tiện ích [. ..]
tail -n +2 file
(sed -n 1q; cat) < file
...
Lệnh thứ hai tương đương với lệnh đầu tiên khi tệp có thể tìm kiếm được.
Tại sao grep -qtiêu thụ toàn bộ tập tin?
Đây là gnu grepnếu nó quan trọng (mặc dù Kusalananda chỉ xác nhận điều tương tự xảy ra trên OpenBSD)
greplà một nhánh của một thứ gọi là FreeGrep , nếu có ai thắc mắc.