12

我有一个包含许多百分比、加号和管道符号的文档。我想用代码替换它们,以便在 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

如何用此代码替换这些符号?

4

3 回答 3

16

测试脚本:

#!/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 版本的唯一区别是我使用扩展的正则表达式模式,因此我必须转义管道和加号,或者将其放入带有[].

于 2012-09-02T08:46:16.593 回答
3
nawk '{sub(/%/,"\\textpercent");sub(/\+/,"\\textplus");sub(/\|/,"\\textpipe"); print}' file

测试如下:

> echo "% + |" | nawk '{sub(/%/,"\\textpercent");sub(/\+/,"\\textplus");sub(/\|/,"\\textpipe"); print}'
\textpercent \textplus \textpipe
于 2012-08-16T12:43:03.450 回答
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
于 2012-08-16T12:38:16.570 回答