sed -i s/installpath/"$INSTALL_PATH"/ /tmp/myscript.conf
当$ INSTALL_PATH只是一个字符串一切正常。但如果安装路径是实际路径(我猜是'/'字符是问题),比如/ home/ubuntu/install_script。然后,它断开与以下错误消息:
的sed:-e表达#1,炭16:未知的选项为`S'
顺便说一句:我尝试没有 “”大约$ INSTALL_PATH。没有工作
感谢您的帮助!
sed -i s/installpath/"$INSTALL_PATH"/ /tmp/myscript.conf
当$ INSTALL_PATH只是一个字符串一切正常。但如果安装路径是实际路径(我猜是'/'字符是问题),比如/ home/ubuntu/install_script。然后,它断开与以下错误消息:
的sed:-e表达#1,炭16:未知的选项为`S'
顺便说一句:我尝试没有 “”大约$ INSTALL_PATH。没有工作
感谢您的帮助!
$INSTALL_PATH
很可能包含斜杠,这意味着它们将被sed解释为s/pattern/replacement/
构造的一部分。为了避免这种情况,你应该使用不同的分隔符,例如~
:
sed -i "s~installpath~$INSTALL_PATH~" /tmp/myscript.conf
我也用引号引用,而不是引用一个部分在整个SED线。一般来说,这样做是个好主意,因为它可以防止shell解释其他字符。通常使用单引号,但如果要扩展shell变量,请使用双引号。
您不必使用/
作为sed命令的分隔符。如果你小心地使用引号,你可以使用其他字符,甚至是不太可能的文件名中存在
sed -i s^installpath^"$INSTALL_PATH"^ /tmp/myscript.conf
:
sed -i "s|installpath|$INSTALL_PATH|" /tmp/myscript.conf
使用的东西,那是不太可能的文件名出现,如这条管道在Windows路径中是完全违法的,在Linux上它是一个非常糟糕的主意,不太可能在野外发生。