2017-12-15 13 views
1

テキストファイル内のテキストを置き換えようとしています。私のスクリプトでは、私は見つけると二つの変数の中に交換するテキストを格納している:変数内の空白を含むsedでテキストを置き換える

$currentProductName='hello' 
$configProductName='byebye' 

交換は、この行で行われている:私の変数のいずれかが空白を含むされるまで

sed -i'.bak' 's/$currentProductName/$configProductName/g' "$projectFile" 

すべてが正常に動作します。 $configProductNamehello worldに設定されている場合、sedコマンドは期待どおりに機能しません。あまりにも、

I'veはすでにこれを試みたが、それは動作しません:

sed -i'.bak' 's/"$currentProductName"/"$configProductName"/g' "$projectFile" 
sed -i'.bak' 's/\$currentProductName/\$configProductName/g' "$projectFile" 

どのように私は期待通りに動作するように行を変更しなければならないのですか?

+1

あなたは本当に 'sed -i'.bak '/ $ currentProductName/$ configProductName/g''の作品ですか? – Sundeep

+0

はいそれは動作します... MacOSで動いています –

+0

私が知る限り、bashは一重引用符内の文字列を解釈しません。 – Sundeep

答えて

1

スペースを保持するには、変数を二重引用符で囲み、再度一重引用符で囲む必要があります。このようにして、プレフィックスが$のどの変数を展開する必要があるかを制御できます。

configProductName='hello world' 

だけで以下のようにsed操作を使用し、期待通りにあなたはそれが働いて見つけたら-iフラグを追加します。

sed 's/$currentProductName/'"$configProductName"'/g' file 
hello world='hello' 
$configProductName='byebye' 
関連する問題