我想,我可以在任何文件上运行一个命令行功能,通过向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