如何在Mac OS X上使用GNU sed

use*_*201 84 macos bash homebrew gnu sed

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

brew install gnu-sed --default-names
Run Code Online (Sandbox Code Playgroud)

当我再次输入时,我收到消息:

已经安装了gnu-sed-4.2.2

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

echo a | sed ’s_A_X_i’
Run Code Online (Sandbox Code Playgroud)

返回:替换命令'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 
Run Code Online (Sandbox Code Playgroud)

如果我的问题看起来很明显,我很抱歉,但我自己学习shell脚本,并且还不太了解UNIX程序的安装方式.任何帮助使用GNU兼容命令(在这种情况下sed,但很快我也需要其他人)在我的Mac上不会造成损害或不必要的混乱将非常感激.

Kas*_*yap 107

注(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
Run Code Online (Sandbox Code Playgroud)

如果需要更新路径......

$ echo $PATH | grep -q '/usr/local/bin'; [ $? -ne 0 ] && export PATH=/usr/local/bin:$PATH
$ echo a | sed 's_A_X_i'
Run Code Online (Sandbox Code Playgroud)

或使用gsed其他建议.

  • --with-default-names选项不再受支持 (4认同)

anq*_*egi 44

使用以下命令安装sed适用于Mac OS X 的GNU版本时:

$ brew install gnu-sed
Run Code Online (Sandbox Code Playgroud)

你使用的程序是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
Run Code Online (Sandbox Code Playgroud)

另外,为了补充在Mac OS X上使用GNU命令工具,这里有一篇很好的博客文章来从linux获取工具:

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


小智 21

$ brew install gnu-sed

$ export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"
Run Code Online (Sandbox Code Playgroud)

使用这两个命令 gnu-sed 可以正常工作

  • 请记住这仅适用于当前终端会话 (2认同)

Mar*_*ell 17

sed附带OS X中/usr/bin.

sedhomebrew安装在/usr/local/bin.

如果您更喜欢使用homebrew它,您有两种选择:

选项1

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

/usr/local/bin/sed
Run Code Online (Sandbox Code Playgroud)

或者,最好是

选项2

在您的登录配置文件中/usr/local/bin/向前移动(即之前)/usr/bin,就像这样

 export PATH=/usr/local/bin:<other places>
Run Code Online (Sandbox Code Playgroud)


ime*_*emi 6

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

export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"
Run Code Online (Sandbox Code Playgroud)