Perl

如何在 perl 中轉義“內部”?

  • October 29, 2020

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

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 有點不同,其中只有單引號會阻止變數擴展。

引用自:https://unix.stackexchange.com/questions/616946