.bash\u配置文件sed:\1未在RE中定义
我必须在我的OS X 10.9上设置本地web开发环境,并安装自制软件。指南中的下一步告诉我使用以下命令将逻辑添加到.bash\u配置文件sed:\1未在RE中定义,sed,homebrew,.bash-profile,Sed,Homebrew,.bash Profile,我必须在我的OS X 10.9上设置本地web开发环境,并安装自制软件。指南中的下一步告诉我使用以下命令将逻辑添加到~/.bash\u配置文件中: 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 &&am
~/.bash\u配置文件中:
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
是否应该将导出路径=/usr/local/bin:/usr/local/sbin:$PATH
写入我的.bash\u配置文件
?为什么会出现这种错误?您应该使用\(.*)
而不是(.*)
sed
默认使用基本正则表达式(BRE),它使用\(
和\)
进行组捕获,而不仅仅是扩展正则表达式(ERE)中使用的(
和)
。由于您的表达式使用了(.*)
而不是\(.*)
,因此不会将其识别为组捕获,因此不会捕获任何内容供\1
使用
一些
sed
实现,例如GNU和BSD提供的实现,确实有一个用于指定ERE使用的扩展,但是它是,如果您想要可移植,就不能使用它。+1;相反地,使用-E
启用对扩展正则表达式的支持,其中(
和)
不需要(不得)转义-在OSX(OP正在运行)和GNU/Linux(只有别名-r
被记录)上都可以工作。“sed使用BRE”不是真的。可悲的是,它默认使用它们。BRE是古老且不受欢迎的,任何新的sed用法都应该始终使用-E(OSX/BSD)或-r(GNU)标志来使用ERE。@ooga现在用更正的信息更新了帖子。谢谢<代码>\(.*)不会给我错误。但是现在整个echo
都被写入了我的.bash\u配置文件0\u 0我猜这就是我的意图:选择在.bash\u配置文件中定义的任何路径,然后在必要时对其进行返工,以确保/usr/local/bin:/usr/local/sbin
出现在开头。它特别删除对路径中已经存在的这两个目录的任何引用,然后在前面替换它们。