如何在 sed 命令中使用变量来替换属性文件中的属性值

Posted

技术标签:

【中文标题】如何在 sed 命令中使用变量来替换属性文件中的属性值【英文标题】:How to use variable in sed command to replace a property value in a property file 【发布时间】:2014-06-03 20:26:35 【问题描述】:

我可以使用下面的命令通过硬编码来改变目标的值。

sed -ie s/^target=.*/target=google.com/ url.properties

但如果我使用变量,我就会出错。我不知道 sed 命令是如何工作的。我只需要设置构建系统就可以了。

url = google.com
sed -ie s/^target=.*/target=$url/ url.properties

错误是 sed: -e expression #1, char 25: unterminated `s' command

【问题讨论】:

【参考方案1】:

问题可能会发生,因为您的 URL 可能包含 / bash 将其解释为 sed 语法,所以像 https/www.google.com 这样的东西最终会变成这样:

sed -ie 's/^target=.*/target=https/www.google.com/' url.properties

我建议对任何特殊字符进行分隔以避免 sed 被混淆:

url=google.com
url=`echo $url | sed -e "s/\//\\\\\\\\\//g"` # delimits backslash in URL's
sed -ie "s/^target=.*/target=$url/" url.properties

【讨论】:

或者为s///命令使用不同的分隔符:sed -i "s#target=.*#target=$url#" file 是的,这也是一种方式,但 URL 也可以包含 # 符号。 url=echo $url | sed -e "s/\//\\\\\//g" sed 出现错误:-e 表达式 #1,字符 9:`s' 的未知选项 @user3551469 你能给我url的值吗 @snyder 非常感谢。它现在工作了。【参考方案2】:

两个问题:

在 bash 的变量赋值中不能有空格 您必须引用 sed 命令(最好是 url)

工作示例:

url="google.com"
sed -ie "s/^target=.*/target=$url/" url.properties

【讨论】:

以上是关于如何在 sed 命令中使用变量来替换属性文件中的属性值的主要内容,如果未能解决你的问题,请参考以下文章

sed在替换的时候,使用变量中的值?如何在sed实现变量的替换?获取到变量中的值?

sed命令在文件中替换、插入

sed修炼系列:sed中的疑难杂症

如何使用 sed 或 awk 命令用变量(变量保存 Unix 脚本)查找和替换文本

shell脚本sed命令如何使用变量替换掉包含指定字符串的整行

如何通过 sed 命令将变量传递给 .conf 文件