Wird negatives Look-Behind in OSX grep unterstützt?

8

Ich versuche so etwas zu tun:

grep -r '(?<!notthis)butthis' ./*

Und ich bekomme keine Ergebnisse, wenn einige zurückgegeben werden sollten. Vermisse ich eine Flucht? Oder unterstützt OSX Regex-Lookaround einfach nicht?

Mafuba
quelle

Antworten:

15

Das Standard-OS X grepunterstützt nur grundlegende und erweiterte reguläre Ausdrücke, wie in POSIX definiert und unter re_format(7)OS X erläutert. Diese Varianten unterstützen kein negatives Look-Behind.

Wenn Sie eine leistungsfähigere Syntax für reguläre Ausdrücke in Kombination mit der grepFähigkeit wünschen , ein Verzeichnis rekursiv nach einem Regex-Muster zu durchsuchen, sollten Sie die Verwendung in Betracht ziehen ack, die in Perl geschrieben ist und daher die Regex-Syntax unterstützt, einschließlich des negativen Rückblicks.

Das Äquivalent zu ackwäre:

ack '(?<!notthis)butthis'

Sie können installieren ackdurch:


Es ist erwähnenswert, dass GNUgrep eine -POption zum Aktivieren der Perl-kompatiblen Regex-Syntax bietet, diese ist jedoch nicht in OS X enthalten. Sie können sie über Homebrew installieren, wenn Sie möchten brew install grep. Unter Linux ist es standardmäßig verfügbar.

Wenn Sie wie ich häufig zwischen Linux und OS X wechseln, würde ich empfehlen, GNU grepunter OS X standardmäßig oder ackals grepErsatz zu verwenden.

slhck
quelle
Es ist erwähnenswert, dass die acküber Homebrew installierte Version kein Lookbehind mit variabler Länge unterstützt (z find . | ack 'node_modules(?<!.*node_modules)'. B. ).
Behrang Saeedzadeh