Как установить и использовать GNU Grep в OSX

50

У меня есть coreutils, но я не уверен, есть ли GNU grep. Я просто хочу использовать флаг -Pдля регулярного выражения Perl, который находится в GNU grep, но не в BSD grep.

У меня PATH, /usr/local/opt/coreutils/libexec/gnubin:/usr/local/bin:/usr/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/git/bin:/usr/texbin:/Users/masi/.cabal/binпоэтому у меня сначала есть coreutils в PATH.

Однако grep - это BSD, когда я его использую: grep --versionдает grep (BSD grep) 2.5.1-FreeBSD.

Команда type -p grepвозвращается/usr/bin/grep

Как вы можете установить GNU Grep в OSX?

Лео Леопольд Герц 준영
источник

Ответы:

72

GNU grep не является частью coreutils. Чтобы установить, запустите

brew install grep

Как и в случае с coreutils, он не заменяет автоматически существующий grep.

==> Caveats
The command has been installed with the prefix "g".
If you do not want the prefix, install using the "with-default-names" option.
Nohillside
источник
2
Когда я делаю это, мой grepпо-прежнему FreeBSD, но egrepи fgrepGNU. Как я могу установить значение grepпо умолчанию для GNU? (Я использовал --with-default-names)
Сочный
3
@juicy ты пробовал это в новой оболочке?
холме
3
Для справки, команда GNU grep названаggrep
Уилл Шеппард
2
Запустите brew uninstall grep(или brew remove grep), если он уже установлен, и brew install grep --with-default-namesукажите grepприоритет GNU в командной строке. Протестировано с Homebrew 1.5.4 Homebrew/homebrew-core (git revision 3bb326; last commit 2018-02-22)Не забудьте открыть новую оболочку или запустить hash -rили export PATH=$PATHперезагрузить пути к бинарным приложениям (т.е. ваш новый GNU grep).
Джонатан Комар
3
@JonathanKomar, к сожалению, в Homebrew версии 2.0.0 флаг --with-default-names больше не доступен.
Дез
5

Как отмечается в комментариях, ответ с наивысшей оценкой (от nohillside) необходимо обновить следующим образом:

Если grep уже был установлен brew, сначала удалите grep.

% brew uninstall grep

Затем установите grep:

% brew install grep

All commands have been installed with the prefix "g".
If you need to use these commands with their normal names, you
can add a "gnubin" directory to your PATH from your bashrc like:
  PATH="/usr/local/opt/grep/libexec/gnubin:$PATH"
=º  /usr/local/Cellar/grep/3.3: 21 files, 880.7KB

Обратите внимание, что вам нужно изменить путь. Например, добавьте в свой .bashrc:

export PATH="/usr/local/opt/grep/libexec/gnubin:$PATH"

Я должен был сделать то же самое на моем Mac, когда после того, как brew upgradeмой grep больше не был доступен (он был установлен ранее с brew install grep --with-default-names, и эта опция больше не доступна).

Это решение работает с Homebrew 2.1.1:

brew --version
Homebrew 2.1.1
Homebrew/homebrew-core (git revision 5afdd; last commit 2019-04-22)
Homebrew/homebrew-cask (git revision a5a206; last commit 2019-04-22)

Этот ответ основан на ответе от nohillside с комментариями Джонатана Комара и Скотта Марднера.

Тимур Штатланд
источник
Это лучше, чем принятый ответ.
SMCI