2013-10-03 24 views
34

私はabc.sh持っている:私はecho $HOMEを印刷する場合、私は/HOME/COM/FILEを取得し、Unixのボックスでsedのコマンドで変数を使う方法は?

exec $ROOT/Subsystem/xyz.sh 

を。

$ROOT$HOMEに置き換えたいのですが、sedを使用しています。

予想される出力:

exec /HOME/COM/FILE/Subsystem/xyz.sh 

私が試したが、私は期待される出力が届かない:

sed 's/$ROOT/"${HOME}"/g' abc.sh > abc.sh.1 

追加:

私はabc.sh

を持っている場合
exec $ROOT/Subsystem/xyz.sh $ROOT/ystem/xyz1.sh 

それは最初$ROOTは、すなわち、出力

exec /HOME/COM/FILE/Subsystem/xyz.sh $ROOT/ystem/xyz1.sh 
+0

の可能重複[シェルスクリプトで文字列を置換](HTTP ://stackoverflow.com/questions/3306007/replace-a-string-in-shell-script) – tripleee

+3

@ tripleeeこれは数多くの質問と重複していると確信していますが、あなたが指摘した質問それがないので、最高のものではありません変数にスラッシュを入れます。その中のすべての答えはセパレータとして '/'を使います。明白なもの、私は知っているが、より良い(重複した)質問のための余地を残す。 – devnull

+0

[sedスクリプトのシェル変数]の可能な複製(http://stackoverflow.com/questions/7006910/shell-variables-in-sed-script) –

答えて

68

言うように来て置換され

sed "s|\$INSTALLROOT/|${INSTALLROOT}|" abc.sh 

有する:

sed "s|\$ROOT|${HOME}|" abc.sh 

  • sedが変数を展開するように二重引用符を使用します。
  • 交換が/
  • が含まれているので、あなたがそれをエスケープする必要はありませんので、パターンに $エスケープ
  • /とは異なる区切り文字を使用してください。

EDIT:$ROOTのすべての出現を交換するためには、これはあなたのために働くかもしれない

sed "s|\$ROOT|${HOME}|g" abc.sh 
14

言う:

sed 's|$ROOT|'"${HOME}"'|g' abc.sh > abc.sh.1 
関連する問題