将逗号分隔的变量添加到文件中

将逗号分隔的变量添加到文件中

我有一个文件,我想在其中插入以下字符串:

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

相关内容