使用 sed 的 \t 字符串

使用 sed 的 \t 字符串

我使用 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 的原因。

相关内容