我试图:
sed -i s/installpath/"$INSTALL_PATH"/ /tmp/myscript.conf
当$ INSTALL_PATH只是一个字符串时,一切正常。但是如果安装路径是一个实际的路径(我猜是' /' char是问题),比如/ home / ubuntu / install_script。然后它打破了以下错误消息:
顺便说一下:我试过没有""在$ INSTALL_PATH附近。没有工作sed:-e表达式#1,字符16:对于s'
的未知选项
感谢您的帮助!
答案 0 :(得分:3)
$INSTALL_PATH
可能包含斜杠,这意味着它们将被sed解释为s/pattern/replacement/
构造的一部分。为避免这种情况,您应使用其他分隔符,例如~
:
sed -i "s~installpath~$INSTALL_PATH~" /tmp/myscript.conf
我还将整个sed行包装在引号中,而不是引用一个部分。一般来说,这样做是个好主意,因为它可以防止shell解释其他字符。通常使用单引号,但如果要扩展shell变量,请使用双引号。
答案 1 :(得分:3)
您不必在sed命令中使用/
作为分隔符。使用在文件名中不太可能出现的内容,例如:
sed -i s^installpath^"$INSTALL_PATH"^ /tmp/myscript.conf
如果你小心引用,你可以使用文件名中更不可能存在的其他字符:
sed -i "s|installpath|$INSTALL_PATH|" /tmp/myscript.conf
管道在Windows路径中是完全非法的,在Linux上它是一个非常糟糕的主意,并且不太可能在野外发生。