sedでディレクトリ文字列が格納されている環境変数等を展開して置換したい †sedコマンドで置換後の文字列に$HOMEなどを指定すると以下のようなエラーが発生します。 $ echo "sakura" | sed -e "s/sakura/$HOME/" sed: -e 表現 #1, 文字数 11: 「s」へのオプションが未知です 関連記事 †
sedが失敗する原因と対処方法 †以下は、sakuraを環境変数$HOMEに置換使用としてエラーが発生しています。 $ echo "sakura" | sed -e "s/sakura/$HOME/" sed: -e 表現 #1, 文字数 11: 「s」へのオプションが未知です この原因は "s/sakura/$HOME/" を展開するとわかります。 $ 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コマンドの区切り文字による動作について記述しました。 |