在编写 Latex 时,通常有一个引用书目文件,其中有时包含 _&$ 。比如期刊名《Nature Structural & Molecular Biology》,文章标题《估计新药开发的成本:真的是8.02亿美元吗?》,卷号“suppl_2”。

所以我需要将这些符号分别转换为 \_\&\$ ,即在前面加一个反斜杠,以便latex编译器可以正确识别它们。我想使用 sed 进行转换。所以我试过了

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

但是生成的new.txt和bib.txt完全一样。我认为 _\ 需要转义,所以我尝试
sed 's/\_/\\\_/' <bib.txt >new.txt

但也没有希望。有人可以帮忙吗?谢谢。

最佳答案

由于 shell 如何处理字符串,您遇到了一些困难。反斜杠需要加倍:

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

请注意,我还添加了一个'g'来表示替换应该全局应用在行上,而不只是应用于第一个匹配项。

要处理所有三个符号,请使用字符类:
sed 's/[_&$]/\\&/g'

(替换文本中的“&”号是指匹配文本的特殊字符,而不是文字“&”号。)

10-08 07:55
查看更多