如何在 perl 中转义“内部”?

왕뚜껑*_*왕뚜껑 2 perl escape-characters

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

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

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

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

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

ilk*_*chu 10

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

$ perl -e 'print "foo\x27bar"' -l
foo'bar
Run Code Online (Sandbox Code Playgroud)

或者处理 shell 中的引用以便给 Perl 一个 raw '

$ perl -e 'print "foo'\''bar"' -l
foo'bar
Run Code Online (Sandbox Code Playgroud)

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


use*_*777 5

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

更好的主意是为您的脚本使用 here-document:

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

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