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?
Das Standard-OS X grep
unterstü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 grep
Fä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 ack
wäre:
ack '(?<!notthis)butthis'
Sie können installieren ack
durch:
brew install ack
Es ist erwähnenswert, dass GNUgrep
eine -P
Option 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 grep
unter OS X standardmäßig oder ack
als grep
Ersatz zu verwenden.
ack
über Homebrew installierte Version kein Lookbehind mit variabler Länge unterstützt (zfind . | ack 'node_modules(?<!.*node_modules)'
. B. ).