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:"