2012-08-16 11 views
7

私は多くのパーセント、プラス、およびパイプ記号を含む文書を持っています。私はそれらをTeXで使うためのコードに置き換えたいと思っています。%、プラス、パイプ記号をすべて検索して交換するにはどうすればいいですか?

  • %\textpercentになります。
  • +\textplusになります。
  • |\textbarになります。

これは私が使用しているコードですが、それは動作しません:

sed -i "s/\%/\\\textpercent /g" ./file.txt 
sed -i "s/|/\\\textbar /g" ./file.txt 
sed -i "s/\+/\\\textplus /g" ./file.txt 

私はこのコードでこれらのシンボルを置き換えることができますどのように?

+0

私の言ったコマンドは私のところで働いています。 – Vijay

+0

3つすべてを1つのsedスクリプトで結合して無償のバックスラッシュを失うことができます。 'sed -i -e' s /%/ \ textpercent/g; s/+/\\ textplus/g; s/|/\\ textbar/g 'file.txt' – tripleee

+0

"すべてのパーセント、 、および私のファイルからのパイプサイン "を入力すると、ファイルを提供する必要があります。 –

答えて

10

テストスクリプト:

#!/bin/bash 

cat << 'EOF' > testfile.txt 
1+2+3=6 
12 is 50% of 24 
The pipe character '|' looks like a vertical line. 
EOF 

sed -i -r 's/%/\\textpercent /g;s/[+]/\\textplus /g;s/[|]/\\textbar /g' testfile.txt 

cat testfile.txt 

出力:

1\textplus 2\textplus 3=6 
12 is 50\textpercent of 24 
The pipe character '\textbar ' looks like a vertical line. 

これはすでに@tripleeeによって同様の方法で提案されている、と私はそれが動作しない理由を参照してくださいませんでした。お分かりのように、私のプラットフォームはあなたと同じバージョンのGNU sedを使用しています。 @ tripleeeのバージョンとの唯一の違いは、拡張正規表現モードを使用することです。パイプとプラスをエスケープするか、[]という文字クラスに入れなければなりません。

2

使用単一引用符:

$ cat in.txt 
foo % bar 
foo + bar 
foo | bar 
$ sed -e 's/%/\\textpercent /g' -e 's/\+/\\textplus /g' -e 's/|/\\textbar /g' < in.txt 
foo \textpercent bar 
foo \textplus bar 
foo \textbar bar 
+0

...可読性のために、 '/'以外の区切り文字を使用することもあります。 '#'を提案してもいいでしょう –

+1

'/'は*のみ*をデリミタとして使用しているので、別のデリミタを使う必要はありません。 –

3
nawk '{sub(/%/,"\\textpercent");sub(/\+/,"\\textplus");sub(/\|/,"\\textpipe"); print}' file 

は、以下のテスト済み:

> echo "% + |" | nawk '{sub(/%/,"\\textpercent");sub(/\+/,"\\textplus");sub(/\|/,"\\textpipe"); print}' 
\textpercent \textplus \textpipe 
+0

結果を新しいファイルに送信することなく、同じファイルに対してこれらの変更を行う方法はありますか? – Village

+0

ニース! nawkとgawkはかなり強力です!マニュアルページとオンラインドキュメントの一部をスキミングした後、強くお勧めします。 – Andrew

+0

@Village出力をファイルの最後に '> filePath'を置くだけでファイルにリダイレクトすることができます(filePathは例えば'/' home/username/myfile')。 – Andrew

関連する問題