#navi(../)
* sedでディレクトリ文字列が格納されている環境変数等を展開して置換したい [#b31d9486]
sedコマンドで置換後の文字列に$HOMEなどを指定すると以下のようなエラーが発生します。~
この原因と対処方法を記します。

 $ echo "sakura" | sed -e "s/sakura/$HOME/"
 sed: -e 表現 #1, 文字数 11: 「s」へのオプションが未知です

#contents
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)

* 関連記事 [#dc717d6d]
-[[grepで大文字小文字を区別しないで検索する>逆引きUNIXコマンド/grepで大文字小文字を区別しないで検索する]]
-[[sedコマンドで大文字小文字を区別せずに置換する方法>逆引きUNIXコマンド/sedコマンドで大文字小文字を区別せずに置換する方法]]
-[[sedで指定した行を削除する方法>逆引きUNIXコマンド/sedで指定した行を削除する方法]]
-[[sedを使ってスペースの文字列操作を行う>逆引きUNIXコマンド/sedを使ってスペースの文字列操作を行う]]
-[[sedを使って改行のみ、スペースのみの行を削除する>逆引きUNIXコマンド/sedを使って改行のみ、スペースのみの行を削除する]]
-[[キーワードからキーワードまでの文字列を抜き出す方法・sedコマンド>逆引きUNIXコマンド/キーワードからキーワードまでの文字列を抜き出す方法・sedコマンド]]
-[[sedでスラッシュを置換する方法>逆引きUNIXコマンド/sedでスラッシュを置換する方法]]

* sedが失敗する原因と対処方法 [#ve73b070]
以下は、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コマンドの区切り文字による動作について記述しました。

#htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS