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?

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.