Mengapa hasil grep BSD ini berbeda dari grep GNU?

13

Komputer saya menjalankan macOS 10.12.3 dan saya menggunakan sistem yang diinstal grep utilitas yang dengan versi 2.5.1-FreeBSD.

Ini adalah output yang saya dapatkan ketika menguji berbagai regex:

Tangkapan layar

Tetapi jika saya menjalankan ini menggunakan GNU grep (versi 2.25) saya mendapatkan yang berikut:

Tangkapan layar

Grep GNU terlihat benar bagi saya dan BSD salah, bukan? Mengapa mereka berbeda? Saya tidak mengerti mengapa grep BSD cocok dengan "a" ketika regex menentukan bahwa itu harus mengikuti awal baris.

Dekade Bulan
sumber
2
Silakan melaporkan perilaku pertama sebagai bug.
Satō Katsura
1
Anda akan melihat bahwa echo 'bababa' | grep -E '^(a|b)'semuanya berwarna merah. Dan Anda akan memiliki masalah yang sama dengannya -o. Saya kira, grepmencari beberapa pertandingan, tetapi untuk pertandingan kedua dan selanjutnya, itu berlaku regexp untuk apa yang ada di sebelah kanan dari apa yang cocok dengan waktu sebelumnya (begitu juga pada ananakedua kalinya dalam kasus Anda) tanpa melewati bendera REG_NOTBOL. Lihat jugaecho banana | grep -Eo '^ban|^ana$'
Stéphane Chazelas
2
@JdeBP, pada OS X saya, grepmengidentifikasi dirinya sebagai grep (BSD grep) 2.5.1-FreeBSDhalaman manual yang merujuk ke GNU hanya dengan menyebutkan "opsi panjang yang disediakan untuk kompatibilitas dengan versi GNU". Juga, tidak ada pemberitahuan hak cipta atau menyebutkan GPL (atau FSF). Jika memiliki sejarah dengan util GNU, sulit untuk mengatakannya.
ilkkachu
Kami menunjukkan bagaimana ini menyesatkan. (-: Yang grepdibahas dalam jawaban Decade Moon yang oleh banyak orang dianggap benar diidentifikasi sebagai grep (GNU grep) 2.5.1-FreeBSD(seperti dapat dilihat dalam diskusi bug), memiliki pemberitahuan hak cipta FSF, dan yang paling pasti adalah GNU grep. Apa yang disebut FreeBSD bsdgrepadalah apa yang OpenBSD maksudkan oleh OpenBSD panggilan grepdan BSD grep, dengan tidak ada --coloropsi mengalahkan varian FreeBSD. Itulah yang diidentifikasi sebagai grep (BSD grep) 2.5.1-FreeBSD, dan ironisnya adalah apa yang satu orang dalam diskusi bug menyarankan agar FreeBSD beralih grepke.
JdeBP

Jawaban:

9

Saya pikir ini mungkin bug di grep FreeBSD. Ada laporan bug dengan masalah serupa.

Dekade Bulan
sumber