我有一個恢復數據庫轉儲的腳本。作爲參數,數據庫名稱被傳遞給該腳本。在轉儲存在以下行:通過腳本和sed更改文件中的一行字符串
ALTER DATABASE `previosDbName` CHARACTER ... ;
我必須要改變previosDbName
的值,作爲參數傳遞。我嘗試使用sed
,但它不起作用。 這裏是一個腳本:
echo $3
export updateValue="ALTER DATABASE \`$3\`"
echo $updateValue
sed -i 's/ALTER DATABASE `\(.*\)`/${updateValue}/' $4
在這裏,我怎麼運行它:
./test.sh dbP dbN medi_6_0 full_path_to_test.sql
腳本的輸出告訴我們,updateValue
是正確的:
medi_6_0
ALTER DATABASE `medi_6_0`
但結果字符串:
${updateValue} CHARACTER ...;
相反的:
ALTER DATABASE `medi_6_0` CHARACTER ...;
我也嘗試使用雙引號,但它並沒有幫助:
sed -i 's/ALTER DATABASE `\(.*\)`/"${updateValue}"/' $4
更新:通過@Sundeep提供解決方案幫助:
sed -i 's/ALTER DATABASE `\(.*\)`/'"${updateValue}"'/' $4
沒有描述的解決方案: How to use variables in a command in sed? 幫助。由於大多數解決方案(沒有檢查全部),在這個主題中提供。
單引號內的雙引號只是另一個角色,也不會做變量替換...嘗試'''S/ALTER DATABASE'\( 。* \)'/'「$ {updateValue}'''/''' – Sundeep
試一試'sed -i -E」s/ALTER DATABASE(。*)/ $ updateValue /「$ 4' –
@Sundeep,only您的解決方案幫助非常感謝你! – Alexandr