sed命令使用变量失效求助:插入变量名而非实际值
解决sed插入变量时无法展开的问题
你遇到的核心问题是shell的引号规则:单引号包裹的内容会被当作纯字面量,$str_builder不会被替换成变量的实际值,而是直接输出字符串本身。下面给你几种可行的解决办法:
方法1:将sed命令整体改用双引号(注意转义内部双引号)
把原命令的单引号换成双引号,同时对要插入的双引号进行转义,避免shell误判命令边界:
sed "1a\"$str_builder\"" certs.json > certs-new.json
这样shell会先展开$str_builder变量,再把完整内容传给sed执行。
方法2:单引号+双引号拼接(更灵活)
如果sed命令里还有其他需要单引号保护的内容,可以把变量部分单独用双引号包裹,和其他单引号内容拼接:
sed '1a'"\"$str_builder\"" certs.json > certs-new.json
这里'1a'是单引号包裹的固定sed指令,"\"$str_builder\""是双引号包裹的变量部分(转义双引号保证插入后格式正确),shell会自动把两部分拼接成完整的sed命令。
方法3:用awk替代sed(避免特殊字符问题)
如果你的str_builder变量里包含/、&这类sed的特殊字符,上面的方法可能会出错,这时用awk更稳妥:
awk -v str="$str_builder" 'NR==1{print; print "\""str"\""; next}1' certs.json > certs-new.json
-v str="$str_builder":把shell变量传递给awk内部变量strNR==1{print; print "\""str"\""; next}:处理第一行时,先打印原行,再打印带双引号的变量内容,然后跳过后续逻辑1:对其他行直接打印(awk里1表示执行默认的打印操作)
举个实际例子,假设str_builder='{"url": "www.example.com"}',执行上述任意一种方法后,certs-new.json的内容会变成:
[ {"url": "www.example.com"}, { "url" : "www.google.com", ...
内容的提问来源于stack exchange,提问作者tnoel999888
相关产品推荐
相关产品推荐

