我正在使用以下脚本,但得到了意外的输出。
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