Text-Processing
用另一個變數的值替換一個變數
例如,我有一個
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 範例。
主要問題是您所說的:我認為它與 / 有關。
當您使用 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'
另一種替換變數的方法是使用
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