質問: sed で \ を含む文字列に置換 現在、非常に多数のドキュメントの整形を latexを使って自動的に行っています。 問題となっている処理のエッセンスを抜き出すと次のようなもので、テンプレートファイル中の __pattern__ という文字列を、その都度指定する文字列($string)に置換した後にplatexでコンパイルする、という流れです。 ---------- #!/bin/bash sed "s/__pattern__/$string/" < template.tex > document.tex platex document.tex ---------- 問題は、$string に '_'(アンダーバー)が含まれるケースで、platexのコンパイルでエラーが発生します。 これを回避するには、'_' を '\_' に置換する必要がありますが、上記処理の前に、$string 中の '_' を '\_' に置換する処理を加えても、上記処理の段階で '\' が消えてしまいます。 肝は sed でのエスケープのやり方だと思うのですが、どうにもうまく行きませんので、お知恵を拝借できればと思います。 なお、tex ファイル中、__pattern__ は、他のコマンドの引数内で使用されているため、\verb+ + で囲むという手段も使えません。
回答: ""中なら \ は \\ とクォートしないとダメですね. ちなみに「$string 中の '_' を '\_' に置換する」のはどんな処理ですか?