【发布时间】:2020-05-04 13:33:21
【问题描述】:
背负this question 我有一个命令(在 Docker 容器中运行),我试图用 sed 将表达式替换为 jq 生成的 JSON 字符串。
小故事:
我在文件tmp.txt 中有一个环境变量白名单:
ENV_VAR_A
ENV_VAR_B
ENV_VAR_C
我使用 jq 使用上一个线程中的答案来生成这样的 JSON 字符串:
jq -Rn '[inputs | {(.): env[.]}] | add' ./tmp.txt
# GENERATES { "ENV_VAR_A": "a val", "ENV_VAR_B": "a val", "ENV_VAR_C": "a val"}
太棒了!现在我正在尝试使用 sed(作为 Docker CMD)来替换一些东西:
# CMD sed -i 's@{{SOME_PATTERN}}@'$( jq -Rn '[inputs | {(.): env[.]}] | add' ./etc/nginx/conf.d/env)'@' ./somefile
但我得到了:
sed: -e expression #1, char 22: unterminated `s' command
所以替换出了点问题 - 但我对 shell 的了解还不够,无法弄清楚如何修复它,我觉得我必须移动一些引号/分隔符,或者可能将我的 jq 通过管道传递给“清理” up" 替换之前的 json 字符串,但我不确定是什么。
正在寻找一些 sed-fu,有人可以帮忙吗?
【问题讨论】:
-
与其努力让 sed 与 jq 一起工作,为什么不只使用 jq 来做所有事情呢?如果您对
somefile的外观进行一些说明,也许会有所帮助。 -
@peak 这是一个 HTML 文件,我用 JSON 字符串替换占位符。
-
如果你的 jq 支持 --rawfile 命令行选项,那么使用 jq 来执行这两个任务会很容易。
-
@peak 那会是什么样子?