sed分别用"\ _","\&","\ $"替换"_","&","$"

Jac*_*Lee 7 linux latex sed

在写胶乳,通常有一个书目文件,它有时含有_,&$.例如,期刊名称"自然结构与分子生物学",文章标题"估计新药开发的成本:它真的是1.80亿美元?",卷号"suppl_2".

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

sed 's/_/\_/' <bib.txt >new.txt
Run Code Online (Sandbox Code Playgroud)

但生成的new.txt与bib.txt完全相同.我想_并且\需要逃脱,所以我试过了

sed 's/\_/\\\_/' <bib.txt >new.txt
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*ber 12

由于shell处理字符串的方式,你遇到了一些困难.反斜杠需要加倍:

sed 's/_/\\_/g'
Run Code Online (Sandbox Code Playgroud)

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

要处理所有三个符号,请使用字符类:

sed 's/[_&$]/\\&/g'
Run Code Online (Sandbox Code Playgroud)

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