Aşağıdaki giriş dosyasını göz önünde bulundurun:
1
2
3
4
Koşu
{ grep -q 2; cat; } < infile
hiçbir şey basmıyor. Yazdırmasını bekliyorum
3
4
Değiştirirseniz beklenen çıktıyı alabilirim
{ sed -n 2q; cat; } < infile
Neden ilk komut beklenen çıktıyı yazdırmıyor?
Bu, aranabilir bir giriş dosyasıdır ve SEÇENEKLER altındaki standarda göre :
-q
Quiet. Nothing shall be written to the standard output, regardless of
matching lines. Exit with zero status if an input line is selected.
ve dahası, UYGULAMA KULLANIMI altında (benimkini vurgula):
-q
Seçenek kolayca bir desen (veya dize) dosyaları bir grup var olup olmadığını belirleyen bir araç sağlar. Birkaç dosya ararken, performans iyileştirmesi sağlar ( çünkü ilk eşleşmeyi bulur bulmaz bırakabilir ) [...]
Şimdi, aynı standart başına ( Giriş bölümünde , GİRDİ DOSYALARI altında )
Standart bir yardımcı program aranabilir bir giriş dosyasını okuduğunda ve dosya sonuna ulaşmadan önce hatasız bir şekilde sona erdiğinde , yardımcı program açık dosya tanımındaki dosya ofsetinin yardımcı program tarafından işlenen son bayttan hemen sonra düzgün bir şekilde konumlandırılmasını sağlamalıdır . ..]
tail -n +2 file
(sed -n 1q; cat) < file
...
İkinci komut yalnızca dosya aranabilir olduğunda birinciye eşittir.
Neden grep -q
tüm dosyayı tüketiyor?
Bu, gnu grep
eğer önemliyse ( Kusalananda , aynı durumun OpenBSD'de de yapıldığını doğrulasa da )
grep
adlı bir çatal .