![将逗号分隔的变量添加到文件中](https://linux22.com/image/198627/%E5%B0%86%E9%80%97%E5%8F%B7%E5%88%86%E9%9A%94%E7%9A%84%E5%8F%98%E9%87%8F%E6%B7%BB%E5%8A%A0%E5%88%B0%E6%96%87%E4%BB%B6%E4%B8%AD.png)
我有一个文件,我想在其中插入以下字符串:
export TRUSTED_PROXIES='"172.16.0.0/12, 172.17.0.0/12"'
[root@sasasas]# echo $TRUSTED_PROXIES
"172.16.0.0/12, 172.17.0.0/12"
但我收到此错误:
[root@sasasas]# sed -i '2i trusted_proxies ='$TRUSTED_PROXIES'' log.conf
sed: can't read 172.17.0.0/12": No such file or directory
但是,如果我使用实际值运行下面的命令,它就会起作用:
sed -i '2 i trusted_proxies =172.16.0.0/12, 172.17.0.0/12' log.conf
如何转义逗号分隔的环境变量值并插入到文件中?我正在使用Linux。
我尝试的命令如下
sed -i '2i trusted_proxies ='$TRUSTED_PROXIES'' log.conf
sed -i '2i trusted_proxies ="$TRUSTED_PROXIES"' log.conf
sed -i "2i trusted_proxies ='$TRUSTED_PROXIES'" log.conf
sed -i "2i trusted_proxies ="$TRUSTED_PROXIES"" log.conf
答案1
因为您的变量包含空格,并且您不加引号地传递它,所以 shell 会尝试扩展它,而sed
实际看到的是作为文件的第二个值。如果您运行的话,这可能更容易理解,set -x
这样您就可以看到 shell 执行的扩展命令:
$ set -x
$ sed -i '2i trusted_proxies ='$TRUSTED_PROXIES'' file
+ sed -i '2i trusted_proxies ="172.16.0.0/12,' '172.17.0.0/12"' file
sed: can't read 172.17.0.0/12": No such file or directory
正如您在上面看到的,实际运行的命令是:
sed -i '2i trusted_proxies ="172.16.0.0/12,' '172.17.0.0/12"'
sed
寻找名为 的文件也是如此'172.17.0.0/12"'
。解决方法是将变量加双引号:
sed -i '2i trusted_proxies ='"$TRUSTED_PROXIES"'' file
或者,更简单地,将整个sed
命令用双引号括起来,并在打印值周围使用单引号:
sed -i "2i trusted_proxies ='$TRUSTED_PROXIES'" file
答案2
Inputfile
praveen@praveen:~$ cat k3
10
20
TRUSTED_PROXIES='"172.16.0.0/12, 172.17.0.0/12"'
awk -v TRUSTED_PROXIES="$TRUSTED_PROXIES" 'NR==2{$0="trusted_proxies="TRUSTED_PROXIES"\n"$0}1' k3 >k3_temp && mv k3_temp k3
output
10
trusted_proxies="172.16.0.0/12, 172.17.0.0/12"
20