Perl
如何在 perl 中轉義“內部”?
我正在使用以下腳本,但得到了意外的輸出。
perl -pi -e '/DB_CHARSET/ and $_.="define('SOMETHING'/, true);\n"' file.txt
該命令添加
define(SOMETHING, true);
由於文本以 ’ 開頭,然後在裡面有 “,我如何轉義 ‘SOMETHING 以便最終得到 ’
define('SOMETHING', true)
?我已經嘗試過通常的 \ 並沒有幫助。
您可以在 Perl 字元串中使案例如
\x27
(十六進制的字元程式碼'
):$ perl -e 'print "foo\x27bar"' -l foo'bar
或者處理 shell 中的引用,以便給 Perl 一個 raw
'
:$ perl -e 'print "foo'\''bar"' -l foo'bar
(第一個
'
結束帶引號的字元串,\'
插入引號,第三個'
開始一個新的帶引號的字元串。)
您可以將每個更改
'
為'\''
. 但這很快就會變得醜陋。一個更好的主意是為您的腳本使用 here-document:
perl -pi - <<'EOT' file.txt /DB_CHARSET/ and $_.="define('SOMETHING'/, true);\n" EOT
注意周圍的引號
EOT
。如果 here-document 終止符不在(單引號或雙引號)中,則$
-starting 變數、算術替換、反引號等將在 here-document 中展開。這與 perl 中的 here-documents 有點不同,其中只有單引號會阻止變數擴展。