- ベストアンサー
linax、sedコマンドに/を使う場合
初心者です。 変数hogeの文字列を、変数fugaに置換したいのですが、fugaには/が含まれる場合があります。 /が含まれる場合にエラーとなってしまうのですが、回避する方法あるでしょうか? sed -e s/$hoge/$fuga/
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
要はgrepでいうとこの -F (fixed string) をsedでも・・・ということですよね? 言われて自分も考えてみたら結構大変でした。trは1文字だけだし 取り敢えず区切り文字だけなら、都度強引に書き換えてやればなんとかなるんじゃないでしょうか -Fを実現しようとしたら、sedメタ文字の類を全て置換しとく必要がありそうですけど。 sedや一般的なフィルタコマンドで綺麗なオプションがあるなら是非知りたいのですが、個人的にこの話へ直面したらperlやらrubyやらのワンライナーで解決しそうな気はします。 シェルのクォーテーション解釈とかもシンプルになるので。 http://ideone.com/Jl7on
その他の回答 (3)
- notnot
- ベストアンサー率47% (4900/10361)
sed -e "s@${hoge}@${fuga}@" とか 区切り文字は別に / である必要は無いです。
補足
No1の方の補足にも書きましたが、 区切り子を変えてみる方法も考えましたが、変数に絶対に入って来ないと言い切れる文字が存在しない為、根本的な解決には至りませんでした。
- ru37su
- ベストアンサー率0% (0/1)
hoge から fu/ga の場合は sed 's/hoge/\\(fu\\/ga\\)/' でしょうか。 「sed 置換 スラッシュ」などで検索すれば出てきます。
補足
hoge、fugaはいずれも変数です。 sedを行う前に、変数の中身をいじってエスケープを埋め込むしかないのでしょうか?
- Tacosan
- ベストアンサー率23% (3656/15482)
たぶんマニュアルに書いてあるんじゃないかな.
補足
ご解答有り難うございます。 manの内容も確認し、クォートで囲ってみたりしましたがダメでした。 区切り子を変えてみる方法も考えましたが、変数に絶対に入って来ないと言い切れる文字が存在しない為、根本的な解決には至りませんでした。 申し訳ありませんが、もう少し詳しくご教示頂けたらと思います。
補足
簡単に置き換える手段はやっぱりなさそうなのですね。 クォートの囲み方や、オプションで何とか出来ないかと思っていたのですがやっぱり無理そうですね。 ありがとうございます。