我正在编写一个脚本,以将dafault配置值替换为用户指定的值。但是我从sed中得到了未终止的's'命令错误。经过2个小时的谷歌搜索,我仍然没有弄清楚是什么原因造成的。这些行是:
CONFIG_GMETAD_COMPUTENODES="scccompute1 scccompute2"
CONFIG_GMETAD="/etc/gmetad.conf"
sed -i 's/localhost/'${CONFIG_GMETAD_COMPUTENODES}'/g' ${CONFIG_GMETAD}
代替
sed -i 's/localhost/scccompute1 scccompute2/g' /etc/gmetad.conf
我得到的错误
sed: -e expression #1, char 23: unterminated `s' command
我看不到这里有什么问题,但很少与sed一起工作。
您需要引用变量。注意sed
命令如何扩展:
sed -i 's/localhost/'scccompute1 scccompute2'/g' /etc/gmetad.conf
这将创建多个选项,而不是您的sed脚本中的单个选项。相反,请尝试:
sed -i 's/localhost/'"${CONFIG_GMETAD_COMPUTENODES}"'/g' "${CONFIG_GMETAD}"
将变量包含在双引号中会使整个字符串被视为的单个参数sed
,这是您想要的。当然,请在文件名两边加上引号,因为文件名可能包含特殊字符。通常,在bash中引用变量时,请始终用引号引起来。
请注意,如果嵌入式变量包含斜杠或其他特殊字符,则可能会破坏脚本。因此,您可能需要先进行一些完整性检查,然后再将其提供给sed
:
CONFIG_GMETAD_COMPUTENODES="${CONFIG_GMETAD_COMPUTENODES//[^a-z0-9 ]/}"
如果bash是您的shell,这将去除所有不是字母数字或空格的字符。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句