在 OSX 上安装了 GNU grep,但无法使用
Installed GNU grep on OSX, but can't use
我试过在 OSX 上安装 GNU grep,它似乎已安装,但我无法使用它。我已经使用自制软件完成了,Macports 目前有一些问题,所以我不能用那个。
安装:brew tap homebrew/dupes; brew install grep
哪个returns:Warning: homebrew/dupes already tapped! Warning: homebrew/dupes/grep-2.21 already installed
符号链接似乎适用于 /usr/local/bin/ggrep。当我添加别名 alias grep="ggrep"
并执行 grep --version
时,我得到 -bash: ggrep: command not found
。这是真的,因为文件夹中没有 ggrep。我试过安装 --with-default-names
和不安装 --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".
我看过以下 post,但 none 的解决方案对我有用。 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
?
要使 GNU grep 默认安装 --with-default-names
:
$ brew install grep --with-default-names
如果您已经安装了它,请使用 reinstall
而不是 install
。
确保/usr/local/bin
(GNU grep 的位置)在之前 /usr/bin
(BSD grep 的位置)在您的$PATH
;这似乎是这里的情况。
之后您可能必须启动一个新的 shell 会话,因为 Bash 缓存了当前会话的二进制文件路径。这意味着当你第一次使用 grep
时,它会根据你的 $PATH
决定使用哪个二进制文件并缓存它。下次它将使用缓存的值,因此在重新加载 shell.
之前更改 $PATH
不会改变任何内容
以上答案已正式过时。
自 Homebrew 版本 2.0.0 起,--with-default-names
标志不再可用。
来自官方文档
--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.
您需要做的是将此命令添加到您的 shell
PATH="/usr/local/opt/grep/libexec/gnubin:$PATH"
自 2020 年 2 月 8 日起,您可以按照 eleijonmarck 的建议在 PATH 和 MANPATH 变量前面添加,或者使用符号 links 到 PATH 早期加载的路径。如果您选择使用 eleijonmarck 的方法,我会采用不同的方法。
您需要知道 Homebrew 在哪里安装 grep 二进制文件。
PATH=/usr/local/opt/grep/bin:$PATH
相对于 libexec。文件系统层次结构指定 libexec 目录
includes internal binaries that are not intended to be executed directly by users or shell scripts.
此外,如果您正在这样做,那么您可能也需要 MAN 页面。
MANPATH=/usr/local/opt/grep/share/man:$MANPATH
另一种选择是使用符号 links。您可能会想这样做:
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
此技术的缺点是您必须为每个二进制文件添加一个符号 link。
我试过在 OSX 上安装 GNU grep,它似乎已安装,但我无法使用它。我已经使用自制软件完成了,Macports 目前有一些问题,所以我不能用那个。
安装:brew tap homebrew/dupes; brew install grep
哪个returns:Warning: homebrew/dupes already tapped! Warning: homebrew/dupes/grep-2.21 already installed
符号链接似乎适用于 /usr/local/bin/ggrep。当我添加别名 alias grep="ggrep"
并执行 grep --version
时,我得到 -bash: ggrep: command not found
。这是真的,因为文件夹中没有 ggrep。我试过安装 --with-default-names
和不安装 --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".
我看过以下 post,但 none 的解决方案对我有用。 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
?
要使 GNU grep 默认安装 --with-default-names
:
$ brew install grep --with-default-names
如果您已经安装了它,请使用 reinstall
而不是 install
。
确保/usr/local/bin
(GNU grep 的位置)在之前 /usr/bin
(BSD grep 的位置)在您的$PATH
;这似乎是这里的情况。
之后您可能必须启动一个新的 shell 会话,因为 Bash 缓存了当前会话的二进制文件路径。这意味着当你第一次使用 grep
时,它会根据你的 $PATH
决定使用哪个二进制文件并缓存它。下次它将使用缓存的值,因此在重新加载 shell.
$PATH
不会改变任何内容
以上答案已正式过时。
自 Homebrew 版本 2.0.0 起,--with-default-names
标志不再可用。
来自官方文档
--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.
您需要做的是将此命令添加到您的 shell
PATH="/usr/local/opt/grep/libexec/gnubin:$PATH"
自 2020 年 2 月 8 日起,您可以按照 eleijonmarck 的建议在 PATH 和 MANPATH 变量前面添加,或者使用符号 links 到 PATH 早期加载的路径。如果您选择使用 eleijonmarck 的方法,我会采用不同的方法。
您需要知道 Homebrew 在哪里安装 grep 二进制文件。
PATH=/usr/local/opt/grep/bin:$PATH
相对于 libexec。文件系统层次结构指定 libexec 目录
includes internal binaries that are not intended to be executed directly by users or shell scripts.
此外,如果您正在这样做,那么您可能也需要 MAN 页面。
MANPATH=/usr/local/opt/grep/share/man:$MANPATH
另一种选择是使用符号 links。您可能会想这样做:
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
此技术的缺点是您必须为每个二进制文件添加一个符号 link。