Pertimbangkan file input berikut:
1
2
3
4
Lari
{ grep -q 2; cat; } < infile
tidak mencetak apa pun. Saya berharap untuk mencetak
3
4
Saya bisa mendapatkan hasil yang diharapkan jika saya mengubahnya
{ sed -n 2q; cat; } < infile
Mengapa perintah pertama tidak mencetak output yang diharapkan?
Ini adalah file input yang dapat dicari dan sesuai standar dalam OPSI :
-q
Quiet. Nothing shall be written to the standard output, regardless of
matching lines. Exit with zero status if an input line is selected.
dan lebih jauh ke bawah, di bawah APLIKASI PENGGUNAAN (menekankan tambang):
The
-q
pilihan menyediakan sarana mudah menentukan apakah atau tidak pola (atau string) ada di kelompok file. Saat mencari beberapa file, ini memberikan peningkatan kinerja ( karena dapat berhenti segera setelah menemukan kecocokan pertama ) [...]
Sekarang, sesuai standar yang sama (dalam Pendahuluan , di bawah INPUT FILES )
Ketika sebuah utilitas standar membaca file input yang dicari dan berakhir tanpa kesalahan sebelum mencapai akhir file, utilitas harus memastikan bahwa offset file dalam deskripsi file terbuka diposisikan dengan baik hanya melewati byte terakhir yang diproses oleh utilitas [. ..]
tail -n +2 file
(sed -n 1q; cat) < file
...
Perintah kedua setara dengan yang pertama hanya ketika file dicari.
Mengapa grep -q
mengkonsumsi seluruh file?
Ini gnu grep
jika itu penting (meskipun Kusalananda baru saja mengkonfirmasi hal yang sama terjadi pada OpenBSD)
grep
adalah fork dari sesuatu yang disebut FreeGrep , jika ada yang bertanya-tanya.