我使用 sed 将字符串“\UPo”替换为字符串“\textit{Old (User's preference)}”。我使用的命令是:
find /home/rom/Desktop/nodeRemoval/report -name \*.tex -exec sed -i "s/\\UPo/\\textit{Old (User's preferences)}/g" {} \;
我想转义反斜杠,因为它们是字符串的一部分。但它却给我一个制表符,而不是反斜杠!输出是:\[TAB]extit{Old (User's preference)}
怎么了?
提前致谢,
只读存储器
答案1
由于表达式用双引号引起来,因此字符串将由 bash 进行评估(替换\\
为\
)。实际上,传递给 sed 的正则表达式如下所示:
s/\UPo/\textit{Old (User's preferences)}/g
将每个反斜杠转义两次:
sed -i "s/\\\\UPo/\\\\textit{Old (User's preferences)}/g"
或者,更好的方法是使用单引号。单引号中的任何内容都不会被 bash 评估,但请注意:单引号之间可能不会出现单引号,因此您需要完成单引号,转义单引号,再次开始单引号:
sed -i "s/\\UPo/\\textit{Old (User'\''s preferences)}/g"
这一切都有点傻,这就是我们拥有 Perl 的原因。