왕뚜껑*_*왕뚜껑 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)
(首先'
结束带引号的字符串,\'
插入引号,第三个'
开始一个新的带引号的字符串。)
您可以将每个更改'
为'\''
. 但这很快就会变得丑陋。
更好的主意是为您的脚本使用 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 有点不同,后者只有单引号才能防止变量扩展。
归档时间: |
|
查看次数: |
502 次 |
最近记录: |