2011-11-10 19 views
7

ラテックスの書簡では、通常、参考文献ファイルがあります。_& 、または$。例えば、「Nature Structural & Molecular Biology」、論文タイトル「新薬開発コストの見積もり:本当に802億ドルですか?」、およびボリューム番号「suppl_2」です。

ラテックスコンパイラはそれらを正しく識別できるようにだから私は、すなわち、前にバックスラッシュを追加し、それぞれ\_\&、および\$にこれらのシンボルを変換する必要があります。私は変換を行うためにsedを使いたい。だから試しました

sed 's/_/\_/' <bib.txt >new.txt 

しかし、生成されたnew.txtはbib.txtとまったく同じです。私は_とエスケープする必要\を考えたので、私は

sed 's/\_/\\\_/' <bib.txt >new.txt 

が、ノー希望のいずれかを試してみました。誰かが助けることができますか?ありがとう。

+0

私は謝罪していますが、私が編集していたときに間違っていました。 – rcollyer

+1

すでにこれらの文字の一部がエスケープされている場合、正規表現は前の文字が '\'でないことを確認する必要があります。 –

答えて

12

シェルが文字列をどのように扱うかによって、いくつかの問題が発生しています。バックスラッシュを2倍にする必要がある:

sed 's/_/\\_/g' 

私も交換だけではなく、最初の試合に、ライン上でグローバルに適用すべきであることを示すために「G」を追加したことに注意してください。文字クラスを使用して、すべての3つのシンボルを処理するために

sed 's/[_&$]/\\&/g' 

(置換テキストにアンパサンドがマッチしたテキストではなく、リテラルアンパサンド文字を参照する特殊文字です。)

+0

ありがとうございます。これも機能します。 –

1

\をエスケープする必要があります。このように:sed 's/_/\\_/' new.txt

編集:

sed -iBAK 's/_/\\_/' new.txt

1

あなたは二回、それをエスケープする必要があります。また、所定の位置にnew.txtを修正するために、あなたは-iフラグをsedを渡す必要があります。

➜ 8080667 sed 's/_/\\_/' new.txt 
In writing latex, usually there is a bibliography file, which sometimes contains \_, &, or $. For example, the journal name "Nature Structural & Molecular Biology", the article title "Estimating The Cost Of New Drug Development: Is It Really $802 Million?", and the volume number "suppl_2". 
➜ 8080667 
3
sed 's/\([_&$]\)/\\\1/g' 

eu-we1:~/tmp# cat zzz 
bla__h&thisis&not the $$end 
eu-we1:~/tmp# sed 's/\([_&$]\)/\\\1/g' < zzz 
bla\_\_h\&thisis\&not the \$\$end 
eu-we1:~/tmp# 
+0

とはありません。 sed 's/\([_&$] \)/ \\\ 1/g'を実行してください< src.tex > dst.tex – user237419

+0

ありがとうございます。それは実際に動作します。 –

+0

あなたは歓迎です:) – user237419

関連する問題