Il mio computer esegue macOS 10.12.3 e sto utilizzando l' grep
utilità installata dal sistema con la versione 2.5.1-FreeBSD.
Questi sono gli output che ottengo quando collaudo varie regex:
Ma se eseguo questi usando GNU grep (versione 2.25) ottengo quanto segue:
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.
echo 'bababa' | grep -E '^(a|b)'
è tutto rosso. E avrai lo stesso problema con -o
. Immagino, grep
cerchi 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 anana
seconda volta nel tuo caso) senza passare il flag REG_NOTBOL. Vedi ancheecho banana | grep -Eo '^ban|^ana$'
grep
identifica come grep (BSD grep) 2.5.1-FreeBSD
con 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.
grep
che è 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 grep
ed è BSD grep
, senza alcuna --color
opzione 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 grep
a