如何查找和替换所有百分比,加号和管道标志?

时间:2012-08-16 12:33:03

标签: sed

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

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

3 个答案:

答案 0 :(得分:13)

测试脚本:

#!/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版本的唯一区别是我使用扩展的正则表达式模式,所以我必须要转义管道和加号,或者将它放入带有[]的字符类中。

答案 1 :(得分:3)

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

测试如下:

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

答案 2 :(得分: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