次の文字列を挿入したいファイルがあります。
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
変数にスペースが含まれていて引用符なしで渡されるため、シェルは変数を拡張しようとします。sed
実際に見るのは2番目の値のファイルです。実行するとわかりやすくなり、set -x
シェルで実行されている拡張コマンドを表示できます。
$ 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