无论定界符如何,通过 sed 替换字符串都会失败

Replacing string via sed failing regardless of delimiter

我试图通过用编码为 base64 的数据库 URL 替换虚拟值来将 Jenkins 参数注入到 YAML 文件中,但是由于抛出而失败:char 95: unterminated ` s'命令.

我的变量如下所示:

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 encoded

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

我认为问题出在 $(echo $DB_URL | base64) 的输出生成的空格上。因此,您可以采取两步法:首先, 在执行之前清理变量(通过转义 sed 的空格) 像这样替换:

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

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

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