我想,我可以在任何文件上運行一個命令行功能,通過向include("myinc.inc");
PHP語句更改爲include 'myfile.inc';
我已經開了一個頭下面我的〜/ .bashrc文件:如何在bash腳本中使用Perl正則表達式字符?
function makestandard() {
perl -p -i -e 's/include\("([\w\.]+)"\)/include '$1'/g' $*
}
我source ~/.bashrc;
並在命令行中運行的命令如下:
$ makestandard myfile.php
我得到myfile.php修改,但不是捕捉包括文件名,包含的文件名稱被損壞爲當前文件的名稱。作爲一個不知情的猜測,我認爲bash $1
變量干擾了perl regexp變量的$1
。
我該如何解決這個問題?
背景信息(無需閱讀):我們已經使用PHP_CodeSniffer (phpcs)嗅出PHP代碼,並報告任何壞的「聞香」開始。不幸的是,phpcs不能解決非標準的代碼,它只會報告它。因此,我想編寫一個腳本來修復我們的PHP代碼中一些簡單和常見的非標準元素。我打算用一堆perl pie填充我的makestandard
bash函數。
Shell環境:無論Ubuntu 10.04是開箱即用的。
啊哈 - 謝謝我應該在寫這個問題時從語法高亮中發現了這個問題!用反斜槓轉義單引號會使命令無法獲得源代碼。 – Tom 2010-09-14 12:23:06
''$ 1''變成''''''''''''。我使用['String :: ShellQuote'](http://p3rl.org/String::ShellQuote)模塊。 – daxim 2010-09-14 13:38:35
@daxim不,它不。它全部在單引號內。這意味着'$ 1'受到保護。問題在於通過關閉單引號外殼字符串來取消保護(並在之後立即重新打開)。如果/ foo =「(。*)」/'「,我會說'perl -nle'打印$ 1。 – 2010-09-14 14:43:12