如何在perl中转义“inside”?

如何在perl中转义“inside”?

我正在使用以下脚本,但得到了意外的输出。

perl -pi -e '/DB_CHARSET/ and $_.="define('SOMETHING'/, true);\n"' file.txt

该命令添加define(SOMETHING, true);

由于文本以 ' 开头,然后里面有 " ,我如何转义 'SOMETHING 以便我最终得到define('SOMETHING', true)

我尝试过通常的 \ 但没有帮助。

答案1

您可以将每个更改''\''.但这很快就会变得丑陋。

更好的主意是为您的脚本使用此处文档:

perl -pi - <<'EOT' file.txt
/DB_CHARSET/ and $_.="define('SOMETHING'/, true);\n"
EOT

请注意 周围的引号EOT。如果此处文档终止符不在(单引号或双引号)中,$则起始变量、算术替换、反引号等将在此处文档中展开。这与 perl 中的here-documents 有点不同,其中只有单引号才能防止变量扩展。

答案2

您可以\x27在 Perl 字符串中使用 例如(十六进制的字符代码'):

$ perl -e 'print "foo\x27bar"' -l
foo'bar

或者在 shell 中处理引用以便为 Perl 提供一个 raw '

$ perl -e 'print "foo'\''bar"' -l
foo'bar

(第一个'结束带引号的字符串,\'插入引号,第三个'开始新的带引号的字符串。)

答案3

一种方法是使用-s在 perl 命令行上打开基本开关处理,然后在那里定义单引号:

$ perl -spi -e '$_  .= qq/define(${q}SOMETHING$q, true);/' -- -q=\'   file 

相关内容