我已尝试在OSX上安装GNU grep,它似乎已安装,但我无法使用它..我已经使用自制程序这样做了,Macports目前有一些问题,所以我无法使用它。
安装:brew tap homebrew/dupes; brew install grep
返回:Warning: homebrew/dupes already tapped! Warning: homebrew/dupes/grep-2.21 already installed
Symlinking似乎适用于/ usr / local / bin / ggrep。当我添加别名alias grep="ggrep"
并执行grep --version
时,我得到-bash: ggrep: command not found
。这是真的,因为文件夹中没有ggrep。我尝试使用和不使用--with-default-names
进行安装。
文件夹/usr/local/Cellar/grep/2.21/bin/
包含以下内容:
-r-xr-xr-x 1 Wes admin 158 Oct 14 09:27 egrep
-r-xr-xr-x 1 Wes admin 158 Oct 14 09:27 fgrep
这对我来说很奇怪,因为文档暗示The command has been installed with the prefix "g".
我已经看过以下帖子,但没有一个解决方案适合我。 Updating grep for Mac OS 10.7
有没有人有任何解决方案?我真的想使用GNU grep。
brew unlink grep && brew link grep -v
的输出:
Unlinking /usr/local/Cellar/grep/2.21...
6 symlinks removed
Linking /usr/local/Cellar/grep/2.21...
ln -s ../Cellar/grep/2.21/bin/egrep egrep
ln -s ../Cellar/grep/2.21/bin/fgrep fgrep
ln -s ../../Cellar/grep/2.21/share/info/grep.info grep.info info /usr/local/share/info/grep.info
ln -s ../../../Cellar/grep/2.21/share/man/man1/egrep.1 egrep.1
ln -s ../../../Cellar/grep/2.21/share/man/man1/fgrep.1 fgrep.1
ln -s ../../../Cellar/grep/2.21/share/man/man1/grep.1 grep.1
6 symlinks created`
新
brew uninstall grep; brew install grep
$ which -a grep
/usr/bin/grep
$ which -a ggrep
/usr/local/bin/ggrep
$ echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/git/bin
这次,似乎有些不同。最后安装了ggrep
!我认为unlink
/ link
已经解决了一些问题。
如何将ggrep
设置为默认值?使用alias
?
答案 0 :(得分:14)
要使GNU grep成为默认值,请使用--with-default-names
安装它:
$ brew install grep --with-default-names
如果您已安装,请使用reinstall
代替install
。
确保/usr/local/bin
中/usr/bin
(GNU grep的位置) $PATH
(BSD grep的位置)之前是;这似乎就是这种情况。
您可能必须在之后启动新的shell会话,因为Bash会缓存当前会话的二进制文件路径。这意味着您第一次使用grep
时,它将根据您的$PATH
确定它将使用哪个二进制文件并对其进行缓存。下次它将使用缓存的值,因此在重新加载shell之前,更改$PATH
不会改变任何内容。
答案 1 :(得分:2)
Offically out of date for the answer above.
As of Homebrew version 2.0.0 the --with-default-names flag is no longer available.
from the official documentation
--with-default-names is no longer supported. It is now installed into its own directory and you will need to adjust your PATH to use it.
What you need to do is to add this command to your shell
PATH="/usr/local/opt/grep/libexec/gnubin:$PATH"
答案 2 :(得分:0)
从2020年2月8日开始,您可以按照eleijonmarck的建议在PATH和MANPATH变量之前添加前缀,也可以使用符号链接指向在PATH早期加载的路径。如果您选择使用eleijonmarck的方法,我会做不同的事情。
您需要知道Homebrew在哪里安装grep二进制文件。
PATH=/usr/local/opt/grep/bin:$PATH
与libexec相对。文件系统层次结构指定libexec目录
包括内部二进制文件,这些二进制文件不能直接由用户或shell脚本执行。
此外,如果您正在这样做,那么您可能也需要MAN页面。
MANPATH=/usr/local/opt/grep/share/man:$MANPATH
另一种选择是使用符号链接。您可能会想这样做:
ln -s /usr/local/opt/grep/bin/grep /usr/local/bin/
问题是,这将不起作用,因为MacOS将grep用作built-in。相反,需要删除或替换/usr/bin
中的内置文件。您可以将其重命名为mv /usr/bin/grep /usr/bin/bsdgrep
。这实际上使grep
在/usr/bin
处找不到,但仍可用作bsdgrep
(此技术的优势)。假设您将grep
添加到了/usr/local/bin
,则可以使用以下方法测试您的更改:
which grep && grep -V # prove old grep found first
which grep && grep -V # prove new grep found first
此技术的缺点是必须为每个二进制文件添加符号链接。