Perché questo risultato grep BSD differisce da grep GNU?


13

Il mio computer esegue macOS 10.12.3 e sto utilizzando l' greputilità installata dal sistema con la versione 2.5.1-FreeBSD.

Questi sono gli output che ottengo quando collaudo varie regex:

Immagine dello schermo

Ma se eseguo questi usando GNU grep (versione 2.25) ottengo quanto segue:

Immagine dello schermo

Il grep di GNU mi sembra corretto e quello di BSD non è corretto, no? Perché differiscono? Non capisco perché il grep di BSD corrisponda alla "a" quando il regex specifica che deve seguire l'inizio della riga.


2
Sentiti libero di segnalare il primo comportamento come un bug.
Satō Katsura,

1
Vedrai che echo 'bababa' | grep -E '^(a|b)'è tutto rosso. E avrai lo stesso problema con -o. Immagino, grepcerchi più corrispondenze, ma per la seconda e più volte, applica la regexp a ciò che è a destra di ciò che è stato abbinato la volta precedente (quindi sulla ananaseconda volta nel tuo caso) senza passare il flag REG_NOTBOL. Vedi ancheecho banana | grep -Eo '^ban|^ana$'
Stéphane Chazelas il

2
@JdeBP, sul mio OS X, si grepidentifica come grep (BSD grep) 2.5.1-FreeBSDcon la pagina man riferita a GNU solo citando "lunghe opzioni fornite per la compatibilità con le versioni GNU". Inoltre, nessun avviso sul copyright o menzioni di GPL (o FSF). Se ha una storia con l'utilità GNU, è difficile da dire.
ilkkachu,

Stiamo dimostrando come ciò sia fuorviante. (-: Quello grepche è discusso nella risposta di Decade Moon che così tante persone pensano sia corretto identifica come grep (GNU grep) 2.5.1-FreeBSD(come si può vedere nella discussione sui bug), ha un avviso sul copyright di FSF ed è sicuramente GNU grep. Ciò che FreeBSD chiama bsdgrepè ciò che OpenBSD chiama greped è BSD grep, senza alcuna --coloropzione al di fuori della variante di FreeBSD. Questo è ciò che identifica come grep (BSD grep) 2.5.1-FreeBSD, ed ironicamente è ciò che una persona nella discussione sui bug ha suggerito a FreeBSD di passare grepa
JdeBP

Risposte:


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.