如何在Mac OS 10.10+上使用GNU sed,不再支持'brew install --default-names'


95

在Mac OS 10.10.3下,我通过键入以下命令安装了gnu-sed:

brew install gnu-sed --default-names

再次键入时,收到消息:

已安装gnu-sed-4.2.2

但是,即使在重新启动系统并重新启动终端之后,我仍然无法使用GNU版本的sed。例如:

echo a | sed s_A_X_i

返回:替换命令'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,但不久以后我还将需要其他命令)的任何帮助而不会造成损坏或不必要的混乱的任何帮助将不胜感激。


2
在哪里brew安装了GNU sed?该目录在您的PATH吗?如果输入,会得到什么sed --version?(BSD sed会抱怨; GNU sed会报告其版本信息。)直到您brew在PATH前面的目录/usr/bin或者您学会使用GNU的绝对路径名之前sed,您都不会运行GNU sed。也要小心引号。 与不同,是字处理报价'
Jonathan Leffler

Answers:


112

注意事项(2019):

--with-default-names选项自2019年1月以来已删除,因此现在该选项不再可用。

安装时,如果有人想使用不带g前缀的sed,Homebrew会指导如何修改路径。


您已经安装了不带--with-default-names选件的gnu-sed 。

  • 带有--with-default-names选件,它将安装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按照其他建议使用。


8
--with-default-names选项不再受支持
Amol

49

当您使用以下方法安装sedMac OS X 的GNU版本时:

$ brew install gnu-sed

您使用的程序是gsed

因此,例如:

$ 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获取这些工具:

在Mac OS / OS X上安装和使用GNU命令行工具


19

sed附带OS X中/usr/bin

sedhomebrew安装在/usr/local/bin

如果您喜欢使用homebrew一种,则有两种选择:

选项1

每次您要使用时homebrew sed,键入

/usr/local/bin/sed

或者,最好

选项2

移动/usr/local/bin/提前(即前)/usr/bin在PATH中的登录配置,这样

 export PATH=/usr/local/bin:<other places>

16

$ brew install gnu-sed

$ export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"

通过这两个命令,gnu-sed可以正常工作


请记住,这仅适用于当前的终端会话
maheshmnj

8

如果需要使用带有普通名称的gnu-sed命令,则可以从bashrc将“ gnubin”目录添加到PATH中。只需在bash或终端中使用以下命令即可。

export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"

2

--with-default-names没有为我工作在Mac OS X 10.14.2所以我创建了一个名为符号链接sedgsed在较高$PATH

我还在较高的目录中创建了一个sed.1指向该手册gsed.1页的符号链接,$MANPATH因此man可以访问该手册gsed页而不是默认的手册sed


4
您也可以使用别名,例如alias sed=gsed
kenorb
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.