linux - sed 将 "_"、 "&"、 "$"分别替换为 "\_"、 "\&"、 "\$"

标签 linux latex sed

在写latex的时候,通常会有一个引用书目文件,有时会包含_&,或者$。例如,期刊名称“Nature Structural & Molecular Biology”,文章标题“Estimating The Cost Of New Drug Development: Is It Really $802 Million?”,卷号“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'

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

关于linux - sed 将 "_"、 "&"、 "$"分别替换为 "\_"、 "\&"、 "\$",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8080677/

相关文章:

linux - 关于僵尸进程和线程的问题

linux - 在 Linux 内核中使用 netlink 套接字在用户空间应用程序和字符设备之间进行通信时出错

linux - 对目录中的所有文件运行可执行文件并获取与原始文件对应的不同输出文件

plot - 3D 框(直方图) Gnuplot 与 cairolatex(或 epslatex)

linux 将字符串添加到特定行的开头

linux - Tomcat配置环境变量的最佳方式

html - TeX 到 html 转换器

latex - 如何使用 MathJax 配置 Sphinx 以使用美元符号作为数学定界符

Bash 脚本 : only echo line to ~/. bash_profile 如果该行尚不存在

github - 将特殊的内联代码样式更改为 Markdown 中的 block 代码样式