【发布时间】:2020-06-13 15:45:52
【问题描述】:
在 Linux 上,我需要在 .env 文件中以编程方式替换 <SECRET> 等占位符字符串,如下所示:
KEY=<SECRET>
ANOTHER_VARIABLE=another-value
# here's a comment
PASSWORD=<SECRET>
需要注意的是,此占位符的每次出现都必须替换为 Base64 编码随机性的 不同 实例 - 例如来自 OpenSSL,因为它在许多 Linux 上都可用。
阅读 this answer,我用 GNU sed 4.8 试过这个:
sed -i '0,/<SECRET>/ s__'$(openssl rand -base64 42)'_' .env
(在替换部分选择了替代分隔符 _,因为 Base64 编码的字节可以包含 / 或 + 字符,否则会在无意中用作分隔符时发生冲突。)
这适用于单个替换,一次调用一个。
但 sed 的返回码始终是 0,即使所有出现的正则表达式都已被消耗和替换...
问题:有没有办法让 sed 在占位符用尽时返回非零代码?
(如果这不能用 sed 完成,我很乐意使用 awk 或类似的解决方案。)
【问题讨论】:
-
这stackoverflow.com/q/15965073>能回答你的问题吗?
-
@Quasímodo 我已经尝试过了,但这也没有用 - 返回码仍然是 0。
-
正如@Quasímodo 所建议的那样,在使用 sed 进行替换之前,我已经在一个 while 循环中对占位符进行了 grep'ing。
标签: regex linux string awk sed