• ベストアンサー

linax、sedコマンドに/を使う場合

初心者です。 変数hogeの文字列を、変数fugaに置換したいのですが、fugaには/が含まれる場合があります。 /が含まれる場合にエラーとなってしまうのですが、回避する方法あるでしょうか? sed -e s/$hoge/$fuga/

質問者が選んだベストアンサー

  • ベストアンサー
  • sholmes
  • ベストアンサー率81% (89/109)
回答No.3

要はgrepでいうとこの -F (fixed string) をsedでも・・・ということですよね? 言われて自分も考えてみたら結構大変でした。trは1文字だけだし 取り敢えず区切り文字だけなら、都度強引に書き換えてやればなんとかなるんじゃないでしょうか -Fを実現しようとしたら、sedメタ文字の類を全て置換しとく必要がありそうですけど。 sedや一般的なフィルタコマンドで綺麗なオプションがあるなら是非知りたいのですが、個人的にこの話へ直面したらperlやらrubyやらのワンライナーで解決しそうな気はします。 シェルのクォーテーション解釈とかもシンプルになるので。 http://ideone.com/Jl7on

faysnk
質問者

補足

簡単に置き換える手段はやっぱりなさそうなのですね。 クォートの囲み方や、オプションで何とか出来ないかと思っていたのですがやっぱり無理そうですね。 ありがとうございます。

その他の回答 (3)

  • notnot
  • ベストアンサー率47% (4900/10361)
回答No.4

sed -e "s@${hoge}@${fuga}@" とか 区切り文字は別に / である必要は無いです。

faysnk
質問者

補足

No1の方の補足にも書きましたが、 区切り子を変えてみる方法も考えましたが、変数に絶対に入って来ないと言い切れる文字が存在しない為、根本的な解決には至りませんでした。

  • ru37su
  • ベストアンサー率0% (0/1)
回答No.2

hoge から fu/ga の場合は sed 's/hoge/\\(fu\\/ga\\)/' でしょうか。 「sed 置換 スラッシュ」などで検索すれば出てきます。

参考URL:
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=27380&forum=10
faysnk
質問者

補足

hoge、fugaはいずれも変数です。 sedを行う前に、変数の中身をいじってエスケープを埋め込むしかないのでしょうか?

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

たぶんマニュアルに書いてあるんじゃないかな.

faysnk
質問者

補足

ご解答有り難うございます。 manの内容も確認し、クォートで囲ってみたりしましたがダメでした。 区切り子を変えてみる方法も考えましたが、変数に絶対に入って来ないと言い切れる文字が存在しない為、根本的な解決には至りませんでした。 申し訳ありませんが、もう少し詳しくご教示頂けたらと思います。

関連するQ&A