Я пытаюсь сделать что-то вроде этого:
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 .