繁体   English   中英

通过 sed 替换字符串失败,无论分隔符如何

[英]Replacing string via sed failing regardless of delimiter

I'm trying to inject a Jenkins param to a YAML file by substituting a dummy value with the database URL encoded as base64 but is failing by throwing: char 95: unterminated `s' command .

我的变量如下所示:

env.DB_URL="jdbc:mariadb://mydb:3306/postservice?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&useSSL=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC"

这是我尝试过的:

sed -e "s/dumyvalue/$(echo ${DB_URL} | base64)/" ./file.yaml

我试图转义所有字符,包括 '/','&',';' 但仍然没有成功。 另外,我将分隔符更改为“#”,同样的问题。

file.yaml 中的预期结果:

database_url : dummyvalue 应该变成database_url : db url base64 编码

适用于没有斜杠的字符串。

我认为问题在于$(echo $DB_URL | base64)的 output 生成的空格。 因此,您可以采取两步方法:首先,在执行替换之前清理变量(通过 escaping 为 sed 的空格):

sanitised=$(echo $(echo $DB_URL | base64) | sed 's/ //g')

然后 2)您可以在 sed 命令中使用它:这应该可以解决问题:

sed -e 's/dumyvalue/'"$sanitised"'/' ./file.yaml

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM