如何在Mac OS X上使用GNU sed

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

brew install gnu-sed --default-names 

当我再次input时,我收到消息:

gnu-sed-4.2.2已经安装好了

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

 echo a | sed 's_A_X_i' 

返回:replace命令'i'中的坏标志

我应该怎么做才能使GNU版本工作? 这里是我的$ PATHvariables的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,但很快我会需要其他人),而不会造成损坏或不必要的混乱,将不胜感激。

你已经安装了没有--with-default-names选项的gnu-sed。

  • 使用--with-default-names选项,它将sed安装到/usr/local/bin/
  • 没有这个选项,它会安装gsed

所以在你的情况下,你要做的是:

 $ brew uninstall gnu-sed $ brew install gnu-sed --with-default-names 

如果需要更新path…

 $ echo $PATH | grep -q '/usr/local/bin'; [ $? -ne 0 ] && export PATH=/usr/local/bin:$PATH $ echo a | sed 's_A_X_i' 

或者像其他人一样使用gsed

当你安装sed的GNU版本,为Mac OS X使用:

 brew install gnu-sed 

你使用的程序是gsed

例如:

 ╭─toni@antonios-mbp ~ ‹ruby-2.2.3@laguna› ‹1.7› ‹SBCL 1.3.0› ╰─$ echo "Calimero is a little chicken" > test ╭─toni@antonios-mbp ~ ‹ruby-2.2.3@laguna› ‹1.7› ‹SBCL 1.3.0› ╰─$ cat test Calimero is a little chicken ╭─toni@antonios-mbp ~ ‹ruby-2.2.3@laguna› ‹1.7› ‹SBCL 1.3.0› ╰─$ gsed -i "s/little/big/g" test ╭─toni@antonios-mbp ~ ‹ruby-2.2.3@laguna› ‹1.7› ‹SBCL 1.3.0› ╰─$ cat test Calimero is a big chicken 

OS X附带的sed位于/usr/bin

homebrew安装的sed位于/usr/local/bin

如果你喜欢使用homebrew ,你有两种select:

选项1

每次你想使用homebrew sed ,键入

 /usr/local/bin/sed 

或者,优选地

选项2

在您的loginconfiguration文件的PATH中移动/usr/local/bin/提前(即之前) /usr/bin ,就像这样

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

如果你安装了brew install coreutils ,你将会得到sed以及一些其他的GNU版本的东西,比如tar,date等等。这些都安装在/ usr / local / bin中,前缀为'g'。 所以在安装之后,如果你想要sed的GNU版本,你应该inputgsed 。 很好用。

如果您需要使用正常名称的gnu-sed命令,则可以从您的bashrc中将“gnubin”目录添加到PATH中。 只需在你的bash或terminal中使用下面的命令。

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