首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sed抱怨bash脚本中的数字

sed抱怨bash脚本中的数字
EN

Stack Overflow用户
提问于 2016-04-21 11:28:54
回答 2查看 32关注 0票数 2

我正在编写一个脚本,将dafault配置值替换为用户指定的配置值。但我从sed那里得到了未终止的命令错误。在谷歌搜索了2个小时之后,我仍然没有弄清楚是什么原因造成了这种情况。这些台词是:

代码语言:javascript
复制
CONFIG_GMETAD_COMPUTENODES="scccompute1 scccompute2"
CONFIG_GMETAD="/etc/gmetad.conf"
sed -i 's/localhost/'${CONFIG_GMETAD_COMPUTENODES}'/g' ${CONFIG_GMETAD}

这代替了

代码语言:javascript
复制
sed -i 's/localhost/scccompute1 scccompute2/g' /etc/gmetad.conf

我犯了错误

代码语言:javascript
复制
sed: -e expression #1, char 23: unterminated `s' command

我看不出这里面有什么不对,但不经常和sed一起工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-21 11:32:02

你需要引用你的变量。注意sed命令是如何展开的:

代码语言:javascript
复制
sed -i 's/localhost/'scccompute1 scccompute2'/g' /etc/gmetad.conf

这会创建多个选项,而不是使用sed脚本创建一个选项。相反,试着:

代码语言:javascript
复制
sed -i 's/localhost/'"${CONFIG_GMETAD_COMPUTENODES}"'/g' "${CONFIG_GMETAD}"

将变量包含在双引号中会导致将整个字符串作为sed的单个参数处理,这正是您所希望的。当然,文件名周围还有引号,因为文件名可能包含特殊字符。通常,在bash中引用变量时总是引用它们。

注意,如果嵌入的变量包含斜杠或其他特殊字符,它可能会破坏您的脚本。因此,在将其输入sed之前,您可能需要做一些理智检查。

代码语言:javascript
复制
CONFIG_GMETAD_COMPUTENODES="${CONFIG_GMETAD_COMPUTENODES//[^a-z0-9 ]/}"

如果bash是您的shell,这将删除所有非字母数字或空格的字符。

票数 3
EN

Stack Overflow用户

发布于 2016-04-21 11:33:37

这个问题来自于在bash中引用的话。

你应该用

sed -i "s/localhost/${CONFIG_GMETAD_COMPUTENODES}/g"

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36768229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档