sedコマンドで置換後の文字列に$HOMEなどを指定すると以下のようなエラーが発生します。
この原因と対処方法を記します。
$ echo "sakura" | sed -e "s/sakura/$HOME/" sed: -e 表現 #1, 文字数 11: 「s」へのオプションが未知です
以下は、sakuraを環境変数$HOMEに置換使用としてエラーが発生しています。
$ echo "sakura" | sed -e "s/sakura/$HOME/" sed: -e 表現 #1, 文字数 11: 「s」へのオプションが未知です
この原因は "s/sakura/$HOME/" を展開するとわかります。
echoで表示してみると/がsedの区切りなのかディレクトリの区切りなのかsedコマンドには解釈できないためエラーとなっているのがわかります。
$ echo "s/sakura/$HOME/" s/sakura//home/user/
対処方法としては、/を区切り文字として使用せずパイプ(|)を使用すれば、意図した動作になります。
$ echo "sakura" | sed -e "s|sakura|$HOME|" /home/user
上記sedコマンドに渡される文字列をechoで展開してみると、|が区切り文字になったので、sedコマンドは/を区切り文字ではなく、文字として扱うため、意図した動作になりました。
$ echo "s|sakura|$HOME|" s|sakura|/home/user|
以上、sedコマンドの区切り文字による動作について記述しました。