Warum unterscheidet sich dieses BSD-Grep-Ergebnis von GNU-Grep?

13

Auf meinem Computer wird macOS 10.12.3 ausgeführt, und ich verwende das vom System installierte grepDienstprogramm mit Version 2.5.1-FreeBSD.

Dies sind die Ausgaben, die ich beim Testen verschiedener regulärer Ausdrücke erhalte:

Bildschirmfoto

Wenn ich diese aber mit GNU grep (Version 2.25) ausführe, erhalte ich Folgendes:

Bildschirmfoto

GNUs grep sieht für mich richtig aus und BSD ist falsch, oder? Warum unterscheiden sie sich? Ich verstehe nicht, warum das grep von BSD mit dem "a" übereinstimmt, wenn der reguläre Ausdruck angibt, dass es dem Zeilenanfang folgen muss.

Jahrzehnt Mond
quelle
2
Fühlen Sie sich frei, das erste Verhalten als Fehler zu melden.
Satō Katsura
1
Sie werden sehen, dass echo 'bababa' | grep -E '^(a|b)'alles rot ist. Und Sie haben das gleiche Problem mit -o. Ich schätze, grepsucht nach mehreren Übereinstimmungen, aber für die zweite Übereinstimmung und darüber wird der reguläre Ausdruck auf das angewendet, was rechts von der vorherigen Übereinstimmung ( ananain Ihrem Fall also beim zweiten Mal) steht, ohne dass das Flag REG_NOTBOL übergeben wird. Siehe auchecho banana | grep -Eo '^ban|^ana$'
Stéphane Chazelas
2
Auf meinem OS X grepidentifiziert sich @JdeBP als grep (BSD grep) 2.5.1-FreeBSDManpage, die sich nur auf GNU bezieht, indem "lange Optionen für die Kompatibilität mit GNU-Versionen" erwähnt werden. Auch kein Urheberrechtsvermerk oder Erwähnungen von GPL (oder FSF). Wenn es Geschichte mit der GNU util hat, ist es schwer zu sagen.
Ilkkachu
Wir zeigen, wie irreführend das ist. (-: Das grep, was in der Antwort von Decade Moon besprochen wird, dass so viele Leute denken, dass es richtig ist, identifiziert sich mit grep (GNU grep) 2.5.1-FreeBSD(wie in der Bug-Diskussion zu sehen ist), hat einen FSF-Copyright-Hinweis und ist definitiv GNU grep. Was FreeBSD nennt, bsdgrepist OpenBSD Anrufe grepund ist BSD grep, ohne --colorOption außerhalb der FreeBSD - Variante das ist , was identifiziert als. grep (BSD grep) 2.5.1-FreeBSD, und ironischerweise ist das, was eine Person Diskussion im Bug vorgeschlagen , dass FreeBSD - Schalter grepauf.
JdeBP

Antworten:

9

Ich denke, das könnte ein Fehler in FreeBSDs grep sein. Es gibt einen Fehlerbericht mit ähnlichen Problemen.

Jahrzehnt Mond
quelle