Bu BSD grep sonucu neden GNU grep'ten farklı?


13

Bilgisayarım macOS 10.12.3 çalıştırıyor ve grep2.5.1-FreeBSD sürümüyle sistemde yüklü yardımcı programı kullanıyorum .

Bunlar çeşitli normal ifadeleri test ederken elde ettiğim çıktılar:

Ekran görüntüsü

Ancak bunları GNU grep (sürüm 2.25) kullanarak çalıştırırsam aşağıdakileri elde ederim:

Ekran görüntüsü

GNU'nun grep'i bana doğru görünüyor ve BSD'ler yanlış, değil mi? Neden farklılar? Normal ifade satırın başlangıcına uyması gerektiğini belirttiğinde BSD'nin grep'inin neden "a" ile eşleştiğini anlamıyorum.


2
İlk davranışı bir hata olarak bildirmekten çekinmeyin.
Satō Katsura

1
Bunun echo 'bababa' | grep -E '^(a|b)'kırmızı olduğunu göreceksiniz . Ve aynı problemle karşılaşacaksınız -o. Sanırım, grepbirden fazla maç arar, ancak ikinci maç ve üstü için, ananaREG_NOTBOL bayrağını geçmeden önceki zamanla eşleşen şeyin sağında olana ( örneğin, davanızda ikinci kez) regexp uygular. Ayrıca bakınızecho banana | grep -Eo '^ban|^ana$'
Stéphane Chazelas

2
@JdeBP, OS X'imde, grepkendisini grep (BSD grep) 2.5.1-FreeBSDyalnızca "GNU sürümleriyle uyumluluk için sağlanan uzun seçeneklerden" bahsederek GNU'ya atıfta bulunan man sayfasıyla tanımlamaktadır . Ayrıca, telif hakkı bildirimi veya GPL'den (veya FSF'den) bahsedilmez. GNU util ile geçmişi varsa, bunu söylemek zor.
ilkkachu

Bunun nasıl yanıltıcı olduğunu gösteriyoruz . (-: grepBu kadar çok insan düşünme olarak doğru tanımlar olduğunu olduğunu Decade Ay'ın cevap ele olmasıdır grep (GNU grep) 2.5.1-FreeBSD(böcek tartışmada görülebileceği gibi), bir FSF telif hakkı bildirimi vardır ve kesinlikle GNU grep. Ne çağrıları FreeBSD bsdgrepneyi OpenBSD olduğunu aramaları grepve BSD olan grephiçbir ile --color. o kadar neyi tanımlar olduğunu FreeBSD varyantı outwith seçeneği grep (BSD grep) 2.5.1-FreeBSDve ironik böcek tartışmada bir kişi olduğunu FreeBSD anahtarı önerilen budur grepiçin.
JdeBP

Yanıtlar:


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.