Macos 如何在Mac OS 10.10+;上使用GNU';brew安装--默认名称';不再支持
在Mac OS 10.10.3下,我通过键入以下命令安装了gnu-sed:Macos 如何在Mac OS 10.10+;上使用GNU';brew安装--默认名称';不再支持,macos,bash,sed,homebrew,gnu,Macos,Bash,Sed,Homebrew,Gnu,在Mac OS 10.10.3下,我通过键入以下命令安装了gnu-sed: brew install gnu-sed --default-names 当我再次键入时,我会收到以下消息: gnu-sed-4.2.2已安装 然而,即使重新启动系统并重新启动终端,我仍然不能使用sed的GNU版本。例如: echo a | sed ’s_A_X_i’ $ echo "Calimero is a little chicken" > test $ cat test Calimero is a li
brew install gnu-sed --default-names
当我再次键入时,我会收到以下消息:
gnu-sed-4.2.2已安装
然而,即使重新启动系统并重新启动终端,我仍然不能使用sed的GNU版本。例如:
echo a | sed ’s_A_X_i’
$ echo "Calimero is a little chicken" > test
$ cat test
Calimero is a little chicken
$ gsed -i "s/little/big/g" test
$ cat test
Calimero is a big chicken
返回:
替换命令“i”中的错误标志
我应该怎么做才能让GNU版本正常工作?
以下是$PATH变量中的路径
/Users/WN/-myUnix
/opt/local/bin
/opt/local/sbin
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
/Applications/calibre.app/Contents/MacOS
/opt/ImageMagick/bin
/usr/texbin
如果我的问题显而易见,我很抱歉,但我正在自学shell脚本,还不太了解UNIX程序是如何安装的。在Mac上使用符合GNU的命令(在本例中是sed,但很快我也需要其他命令)而不会造成损坏或不必要的混乱,对此我们将不胜感激。OS X附带的
sed
位于/usr/bin
中
homebrew
安装的sed
位于/usr/local/bin
中
如果您喜欢使用自制one,您有两种选择:
选项1
每次要使用自制sed
,请键入
/usr/local/bin/sed
或者,最好是
选项2
在登录配置文件的路径中向前移动/usr/local/bin/
(即之前)/usr/bin
,如下所示
export PATH=/usr/local/bin:<other places>
导出路径=/usr/local/bin:
如果您需要将gnu sed命令与它们的正常名称一起使用,您可以
可以从bashrc向路径添加“gnubin”目录。只需在bash或终端中使用以下命令
export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"
安装Mac OS X的GNU版本的sed
时,请使用:
$ brew install gnu-sed
您使用的程序是gsed
例如:
echo a | sed ’s_A_X_i’
$ echo "Calimero is a little chicken" > test
$ cat test
Calimero is a little chicken
$ gsed -i "s/little/big/g" test
$ cat test
Calimero is a big chicken
另外,为了补充在Mac OS X上使用GNU命令工具,这里有一篇很好的博客文章,可以从linux获得这些工具:
注(2019年):
带有默认名称的--选项自2019年1月起生效,因此现在该选项不再可用
安装时,如果要使用不带g
前缀的sed,自制软件会指示如何调整路径
您已经安装了gnu sed,但没有使用默认名称的——选项
- 使用
——使用默认名称选项,它将sed
安装到/usr/local/bin/
- 如果没有该选项,它将安装gsed
所以在你的情况下,你要做的是:
$ brew uninstall gnu-sed
$ brew install gnu-sed --with-default-names
如果需要,请更新路径
$ echo $PATH | grep -q '/usr/local/bin'; [ $? -ne 0 ] && export PATH=/usr/local/bin:$PATH
$ echo a | sed 's_A_X_i'
或者按照其他人的建议使用gsed
。--默认名称在Mac OS X 10.14.2上对我不起作用,因此我创建了一个名为sed
到gsed
的符号链接,位于$PATH
我还创建了一个名为sed.1
的符号链接到gsed.1
手册页,位于$MANPATH
的较高位置,因此man
将访问gsed
手册页,而不是默认的sed
手册页$brew install gnu sed
$ export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"
使用这两个命令,gnu-sed可以正常工作此导出路径=“/usr/local/opt/gnu-sed/libexec/gnubin:$PATH”
仅当您重新启动GONE(Mojave)时,每个终端会话才有效。brew在哪里安装了GNUsed
?该目录在您的路径上吗?如果键入sed--version
,会得到什么结果?(BSDsed
将投诉;GNUsed
将报告其版本信息。)除非您在/usr/bin
前面的路径上有brew
目录,或者您学会使用GNUsed
的绝对路径名,否则您将无法运行GNUsed
。也要小心引用“
是一个字处理引号,与”
不同。您也可以使用alias,例如alias sed=gsed
——不再支持默认名称选项。请记住,这只适用于当前终端会话,如果您将其添加到。bashrc
(如果您使用bash作为shell)或者.zshrc
如果您使用zsh作为shell,则每次登录时都会执行它。苹果过去默认使用bash
作为shell,但在Catalina,它将默认shell切换为zsh
。您可以通过在终端窗口中运行w
来判断您的帐户设置为使用哪一个帐户-您将得到一系列行,其中一些行(在我的情况下,我使用zsh)看起来像jpb s000-Sun20 1day-zsh
。-zsh
显示我的帐户正在使用zsh
。