Я пытаюсь сделать что-то вроде этого:
grep -r '(?<!notthis)butthis' ./*
И я не получаю результатов, когда некоторые должны быть возвращены. Я пропускаю побег? Или OSX просто не поддерживает регулярные выражения?
По умолчанию grep
OS X поддерживает только базовые и расширенные регулярные выражения, как определено в POSIX и объяснено в re_format(7)
для OS X. Эти разновидности не поддерживают негативный просмотр.
Если вам нужен более мощный синтаксис регулярных выражений в сочетании с возможностью grep
рекурсивно искать каталог по шаблону регулярных выражений, вам следует рассмотреть возможность использования ack
, который написан на Perl и, следовательно, поддерживает его синтаксис регулярных выражений, включая отрицательный просмотр.
Эквивалент с ack
будет:
ack '(?<!notthis)butthis'
Вы можете установить ack
через:
brew install ack
Стоит отметить, что GNU grep
имеет опцию -P
для включения Perl-совместимого синтаксиса регулярных выражений, однако он не включен в OS X - вы можете установить его через Homebrew, если вам нравится brew install grep
. В Linux он будет доступен по умолчанию.
Если вы часто переключаетесь между Linux и OS X, как я, я бы рекомендовал использовать GNU grep
в OS X по умолчанию или использовать ack
в качестве замены grep
.