我已在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
吗?为什么我会收到这个错误?
答案 0 :(得分:77)
您应该使用\(.*\)
代替(.*)
。
sed
默认使用基本正则表达式(BRE),使用\(
和\)
进行群组捕获,而不仅仅使用(
和)
在扩展正则表达式(ERE)中。由于您的表达式使用的是(.*)
而不是\(.*\)
,因此它不会被识别为群组捕获,因此不会捕获任何内容以用于\1
。
某些sed
实现(例如GNU和BSD提供的实现)确实有一个扩展用于指定ERE的使用,但它是not specified by POSIX,如果你想要的话你就不能使用它便携式。