我正在尝试使用 sed 来替换tex 文件中的&
by 。\&
我正在使用sed -i "s/ & / \\\& /g" bibfile.bib;
但是,文件中的结果\ &
并不\&
符合我的预期。欢迎任何帮助,马克
在类似 Bourne 的 shell 中,使用双引号意味着您需要对反斜杠进行一层额外的转义,就像\\
在双引号内使用转义`
、"
、$
及其本身并进行行延续一样。
请改用单引号。
\n支持\'...\'
作为引用运算符的 shell 也比某些支持"..."
.
所以:
\nsed -i \'s/ & / \\\\\\& /g\' bibfile.bib\n
Run Code Online (Sandbox Code Playgroud)\nsed
使用sed
, -i
, s/ & / \\\\\\& /g
\xc2\xb9 和bibfile.bib
作为四个单独的参数进行调用。
要使用双引号发送相同的参数,您至少需要:
\nsed -i "s/ & / \\\\\\\\\\&" bibfile.bib\n
Run Code Online (Sandbox Code Playgroud)\n前两对\\
变成一\\
对并\\&
留下来\\&
。
sed -i "s/ & / \\\\\\\\\\\\&" bibfile.bib\n
Run Code Online (Sandbox Code Playgroud)\nIMO 也可以工作并且更干净,更明确地表明您希望将 3 个反斜杠传递给sed
,每个反斜杠都插入\\\\
双引号内。
你还可以这样做:
\nsed -i \'s/ \\(& \\)/ \\\\\\1/g\' bibfile.bib\n
Run Code Online (Sandbox Code Playgroud)\n或者:
\nsed -Ei \'s/ (& )/ \\\\\\1/g\' bibfile.bib\n
Run Code Online (Sandbox Code Playgroud)\n你的:
\n\n\nRun Code Online (Sandbox Code Playgroud)\nsed -i \'s/ & / \\\\\\& /g\' bibfile.bib\n
实际上通过sed
, -i
,s/ & / \\\\& /g
和bibfile.bib
作为参数传递给sed
,它将其解释为以" & "
为前缀" \\"
并以 为后缀" "
。
为了完整起见,在其他一些 shell 中:
\n在 csh/tcsh 中,nor\\
内并不特殊(除了转义\'...\'
"..."
!
为了历史扩展而转义)。
所以sed -i "s/ & / \\\\\\& /g" bibfile.bib
和sed -i \'s/ & / \\\\\\& /g\' bibfile.bib
都会在那里工作。
在鱼里面,\\
也很特别\'...\'
,所以你需要:
sed -i "s/ & / \\\\\\\\\\\\& /g" bibfile.bib\n
Run Code Online (Sandbox Code Playgroud)\n或者
\nsed -i \'s/ & / \\\\\\\\\\\\& /g\' bibfile.bib\n
Run Code Online (Sandbox Code Playgroud)\n在一般情况下,后者仍然是首选,因为需要转义的字符较少。
\nrc只有一种引用形式:\'...\'
(not "..."
, \\
nornornor$\'...\'
$"..."
)
sed -i \'s/ & / \\\\\\& /g\' bibfile.bib\n
Run Code Online (Sandbox Code Playgroud)\n只有在那里。
\n请参阅如何在 Unix shell 中将特殊字符用作普通字符?有关哪些字符是特殊字符以及如何在各种 shell 中转义/引用它们的更多详细信息。
\n\xc2\xb9 和 for ,在其命令sed
的替换部分中,被解释为反斜杠和文字,而不是其扩展为匹配内容的特殊含义。s/pattern/replacement/flags
\\\\
\\&
&