web-dev-qa-db-ja.com

sedでbashスクリプト変数を使用する方法

次のbashスクリプトを実行します。

#!/bin/bash
version=$1
echo $version
sed 's/\${version.number}/$version/' template.txt > readme.txt

$ {version.number}のすべてのインスタンスを変数 "version"の内容に置き換えることを期待しています。代わりに、リテラルテキスト$ versionが挿入されています。

Sedに$ versionの現在の値を代わりに使用させるにはどうすればよいですか?

16
Steve McLeod
sed "s/\${version.number}/$version/" template.txt > readme.txt

二重引用符のみがドル記号の置換を行います。これは、一重引用符でドル記号をエスケープする必要がないことも意味します。

19

変数の引用符を外すこともできます

sed 's/'${version.number}'/'$version'/' template.txt > readme.txt
5
Tobias Kienzler

少し古いですが、それでも役立つかもしれません...フィリップが言ったように、私にとってはダブルエスケープを使用して機能しました(そして、使用する場合は括弧をエスケープします...):

#!/bin/bash
LIVE_DB_NAME='wordpress';
STAGING='staging';
sed -r "s/define\('DB_NAME', '[a-zA-Z0-9]+'\);/define('DB_NAME', '\\${LIVE_DB_NAME}');/" ${STAGING}/wp-config.php >tmp1;
0
J Mac