如何在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"