[英]How to preserve '\n' character while replacing/substitute string via 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.