如何查找和替换所有的百分号、加号和竖线符号?

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

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


你提到的命令在我的电脑上可以运行。 - Vijay
1
你可以在一个单独的sed脚本中将所有三个组合起来,而不需要使用多余的反斜杠。 sed -i -e 's/%/\\textpercent /g;s/+/\\textplus /g;s/|/\\textbar /g' file.txt - tripleee
要“成功替换我的文件中的每个百分号、加号和管道符号”,您需要提供我们您的文件。 - user647772
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。唯一不同的是,我使用了扩展正则表达式模式,因此我必须转义管道符和加号或将其放入字符类中[]


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

以下是经过测试的:

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

有没有办法在不必将结果发送到新文件的情况下,使这些更改发生在同一文件中? - Village
不错! nawk和gawk非常强大!强烈推荐,在浏览过它们的man页面和一些在线文档后。 (另请参见:nawk / gawk中的gsub命令,它替换所有出现的内容,而不仅仅是第一个。) - Andrew
@Village 你可以通过在结尾处添加> filePath(其中filePath例如为/home/username/myfile)来将输出重定向到文件。 - Andrew

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

...并且为了可读性,也许可以使用另一个分隔符而不是“/”。我可以建议使用“#”。 - Fredrik Pihl
2
我不认为有必要使用另一个分隔符,因为 / 用作此处的分隔符。 - user647772

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接