web-dev-qa-db-ja.com

sedのコマンドで変数を使用する方法は?

私はabc.shを持っています:

exec $ROOT/Subsystem/xyz.sh

Unixボックスでは、echo $HOMEを印刷すると/HOME/COM/FILEが返されます。

Sedを使用して$ROOT$HOMEに置き換えたい。

期待される出力:

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

その後で

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

最初の$ROOTのみを置き換えています。つまり、出力は次のようになります。

exec /HOME/COM/FILE/Subsystem/xyz.sh $ROOT/ystem/xyz1.sh
49
VJS

いう:

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

注意:

  • sedが変数を展開するように二重引用符を使用します。
  • 置換には/が含まれるため、/とは異なるセパレーターを使用します
  • エスケープしたくないので、パターンの$をエスケープします。

編集:$ROOTのすべての出現を置き換えるために、言う

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

これはあなたのために働くかもしれません:

sed 's|$ROOT|'"${HOME}"'|g' abc.sh > abc.sh.1
21
potong