sed#

変換先文字列に区切り文字(ex. スラッシュ)が含まれる場合は区切り文字にスラッシュが使えない。#

以下は動作せず、

TARGET="/var/tmp"
TO="/run"
echo "$TARGET" | sed -e "s/tmp/$TO/"

以下のエラーが出る。

sed: -e expression #1, char 8: `s' に対するオプションが不明です

これは$TOが展開されることを考えれば理解できる。"s/tmp//run/" ではsedが評価できない。

区切り文字に別の文字を使ってやればよい。 sedはsの直後の文字を区切り文字にするので、例えばコロン使えば以下のように書ける。

TARGET="/var/tmp"
TO="/run"
echo "$TARGET" | sed -e "s:tmp:$TO:"