.bash_profile sed:\ 1未在RE中定义

时间:2014-07-12 21:55:50

标签: sed homebrew .bash-profile

我已在OS X 10.9上设置本地Web开发环境并安装了Homebrew。我的指南中的下一步告诉我使用以下命令向我的~/.bash_profile添加逻辑:

echo "export PATH=\$(echo \$PATH | sed 's|/usr/local/bin||; s|/usr/local/sbin||; s|::|:|; s|^:||; s|(.*)|/usr/local/bin:/usr/local/sbin:\1|')" >> ~/.bash_profile && source ~/.bash_profile

当我在终端输入时,我得到:

sed: 1: "s|/usr/local/bin||; s|/ ...": \1 not defined in the RE

应该将export PATH=/usr/local/bin:/usr/local/sbin:$PATH写入我的.bash_profile吗?为什么我会收到这个错误?

1 个答案:

答案 0 :(得分:77)

您应该使用\(.*\)代替(.*)

sed默认使用基本正则表达式(BRE),使用\(\)进行群组捕获,而不仅仅使用()在扩展正则表达式(ERE)中。由于您的表达式使用的是(.*)而不是\(.*\),因此它不会被识别为群组捕获,因此不会捕获任何内容以用于\1

某些sed实现(例如GNU和BSD提供的实现)确实有一个扩展用于指定ERE的使用,但它是not specified by POSIX,如果你想要的话你就不能使用它便携式。