このエントリーをはてなブックマークに追加


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で表示してみると/が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コマンドの区切り文字による動作について記述しました。



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 22:28:07