sed 変数拡張の問題

sed 変数拡張の問題

だから、私が書いているbashスクリプトでいくつかの進歩を遂げましたが、変数を拡張するために以下を書く方法を見つけることができないようです。私は一般的な$ {variable}と\ $(variable)と他のランダムな試みを試しましたが、それは役に立ちませんでした。

evalを使用して ""でラップしようとしましたが、まだ機能しません(コマンドラインで実行しない限り、bashスクリプトでは機能しません)。

sed -i 's/.*output_snat_lo.conf:/    - '\''\\-t nat -A POSTROUTING -s 10.0.0.1/32 -d $DNAT -j SNAT --to-source $SINT'\''\n&/' file.yaml

どんな提案がありますか?ティア。

答え1

$DNAT一重引用符の内側を'"$DNAT"'終了一重引用符に変更し、二重引用符を開始し(単語の区切りを防ぐためにほぼ常に二重引用符内に変数を拡張したいので)、変数を入れて二重引用符を終了して一重引用符を再起動します。

sed -i 's|.*output_snat_lo.conf:|    - '\''\\-t nat -A POSTROUTING -s 10.0.0.1/32 -d '"$DNAT"' -j SNAT --to-source '"$SINT"\''\n&|' file.yaml

答え2

文字列拡張にパス区切り記号(たとえば/)が含まれている場合は、パターンにない他の文字を使用する必要があります。

また、$variablesを使用するときは二重引用符を使用してください。たとえば、次のようになります。

sed -i 's/old_string/new_string/' $some_file

~になる

sed -i "s|$old_string|$new_string|" $some_file

関連情報