在编写 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'
(替换文本中的“&”号是指匹配文本的特殊字符,而不是文字“&”号。)