2012-09-04 4 views
6

Es scheint, wie die Originalversion von Grep (Versionsinfo: Grep (BSD Grep) 2.5.1-FreeBSD) unter Mac os 10.8 hat ein Problem mit Mustern, die sich ein gemeinsames Präfix teilen, wenn sie im Line-Regex-Modus (-x) ausgeführt werden. Im folgenden minimalen Beispiel würde ich erwarten, dass grep "test" und "test2" meldet, aber nur "test" gemeldet wird. (Das Gleiche gilt auch für den Wort-Regexp-Modus (-w)).grep (BSD grep) 2.5.1-FreeBSD auf Mac OS 10.8 Zeile Regexp-Modus funktioniert nicht mit überlappenden Mustern

printf "test\ntest2\n" > f1.txt 
printf "test\ntest2\n" > f2.txt 
grep -x -F -f f1.txt f2.txt 

Hat jemand andere ähnliche Beobachtungen gemacht oder weiß sogar etwas über einen Workaround?

+0

scheint wie ein Fehler, kann mich nicht testen. Als Workaround haben Sie versucht, die Positionen von test2 und test2 in f1.txt zu ändern? – akostadinov

Antwort

4

Verifiziert; Das sieht wie ein Fehler in Apple und/oder FreeBSD Grep aus. (Das ist absolut nicht überraschend für mich; FreeBSD grep ist ein Haufen hässlicher Standards. Mein Arbeitgeber installiert GNU grep auf all unseren Mac-Systemen anstatt sich mit dem verrückten Verhalten von FreeBSD abzufinden. Und ja, GNU grep findet beide Zeilen in Ihrem Beispiel.)

Wenn Portabilität zwischen Mac und Linux ein Ziel ist, empfehle ich grep insgesamt und nur perl (oder so etwas wie ack, das) ist abhängig von perl verlassen.

@ akostadinovs Vorschlag, längere Muster vor kürzere in f2.txt zu setzen scheint um den Fehler zu arbeiten, aber ich würde von Vertrauen auf etwas wie das sein. Es funktioniert an diesem Spielzeugbeispiel, aber funktioniert es im Allgemeinen und wie teuer wird es sein, wenn Sie es herausfinden?