ある変数を別の変数の値に置き換える

ある変数を別の変数の値に置き換える

input.txtたとえば、次の文を含むテキストファイルがあります。

This is my base64 string: ${BASE64}

この変数があります。

myvar="SGVsbG8gV29ybGQuIERvIHlvdSBsaWtlIG15IGJhc2U2NCBzdHJpbmc/IFRoYXQgaXMgdmVyeSBuaWNlIQ=="

予想出力:

This is my base64 string: SGVsbG8gV29ybGQuIERvIHlvdSBsaWtlIG15IGJhc2U2NCBzdHJpbmc/IFRoYXQgaXMgdmVyeSBuaWNlIQ==

このコマンドで作業を実行する必要があると思いましたが、エラーが発生しました。

$ sed -i -e "s/\${BASE64}/${myvar}/g" text.txt
sed: -e expression #1, char 70: unknown option to `s'

複数のオプションを試して数時間インターネットを検索しましたが、正確にはわかりません。私の考えではこれと関係があると思います。\

まず、何が間違っているのか知りたいです。次に、これを正しく実行する方法を知りたいです。私も適切なawkの例が好きです。

ベストアンサー1

最大の問題はあなたが言ったことです:私の考えでは、それは/に関連しているようです。。 withを区切り文字として
使用するときは、/使用する文字列に注意する必要があります。

したがって、sedコマンドに別の区切り文字を使用する必要があります。

sed -i -e "s@\${BASE64}@${myvar}@g" text.txt 

awkを使う

myvar="SGVsbG8gV29ybGQuIERvIHlvdSBsaWtlIG15IGJhc2U2NCBzdHJpbmc/IFRoYXQgaXMgdmVyeSBuaWNlIQ=="
awk -i inplace -v var='\\$\\{BASE64\\}' -v base="$myvar" '{sub(var,base);}1'

変数を置き換えるもう1つの方法はを使用することですenvsubst。ファイルに変数が含まれている場合は、${BASE64}同じ名前の変数を作成してファイルから置き換えることができます。しかし、変数をエクスポートする必要があります(一度だけ)実行する前にenvsubst

BASE64="SGVsbG8gV29ybGQuIERvIHlvdSBsaWtlIG15IGJhc2U2NCBzdHJpbmc/IFRoYXQgaXMgdmVyeSBuaWNlIQ=="
export BASE64
#Not recommended: 
envsubst < text.txt | tee text.txt
#Or
envsubst < text.txt >  newtext.txt
mv newtext.txt text.txt

おすすめ記事