ファイルにコンマ区切りの変数を追加する

ファイルにコンマ区切りの変数を追加する

次の文字列を挿入したいファイルがあります。

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

関連情報