使用sed插入特殊字符的解决方案

使用sed插入特殊字符的解决方案

我正在尝试使用 sed 来替换tex 文件中的&by 。\&我正在使用sed -i "s/ & / \\\& /g" bibfile.bib; 但是,文件中的结果\ &并不\&符合我的预期。欢迎任何帮助,马克

答案1

在类似 Bourne 的 shell 中,使用双引号意味着您需要对反斜杠进行一层额外的转义,就像\在双引号内使用转义`"$及其本身并进行行延续一样。

请改用单引号。

支持'...'作为引用运算符的 shell 也比某些支持"...".

所以:

sed -i 's/ & / \\\& /g' bibfile.bib

sed使用sed-is/ & / \\\& /g和作为四个单独的参数进行调用bibfile.bib

要使用双引号发送相同的参数,您至少需要:

sed -i "s/ & / \\\\\&" bibfile.bib

前两对\变成一\对并\&留下来\&

sed -i "s/ & / \\\\\\&" bibfile.bib

IMO 也可以工作并且更干净,更明确地表明您希望将 3 个反斜杠传递给sed,每个反斜杠都插入\\双引号内。

你还可以这样做:

sed -i 's/ \(& \)/ \\\1/g' bibfile.bib

或者:

sed -Ei 's/ (& )/ \\\1/g' bibfile.bib

你的:

sed -i 's/ & / \\\& /g' bibfile.bib

实际上将sed, -i,s/ & / \\& /gbibfile.bib作为参数传递给,它将其解释为以为sed前缀并以 为后缀。" & "" \"" "


为了完整起见,在其他一些 shell 中:

csh/tcsh

在 csh/tcsh 中,nor\内并不特殊(除了为了历史扩展而转义)。'...'"..."!

所以sed -i "s/ & / \\\& /g" bibfile.bibsed -i 's/ & / \\\& /g' bibfile.bib都会在那里工作。

在鱼中,\内部也很特殊'...',所以你需要:

sed -i "s/ & / \\\\\\& /g" bibfile.bib

或者

sed -i 's/ & / \\\\\\& /g' bibfile.bib

在一般情况下,后者仍然是首选,因为需要转义的字符较少。

RC

rc 只有一种引用形式:( '...'not "...", \nornornor )$'...'$"..."

sed -i 's/ & / \\\& /g' bibfile.bib

只有在那里。

如何在 Unix shell 中像普通字符一样使用特殊字符?有关哪些字符是特殊字符以及如何在各种 shell 中转义/引用它们的更多详细信息。


和 for ,在其命令sed的替换部分中, the被解释为反斜杠和文字,而不是其扩展为匹配内容的特殊含义。s/pattern/replacement/flags\\\&&

相关内容