我想要一个命令行函数,我可以在任何文件上运行,将include("myinc.inc");
PHP语句更改为include 'myfile.inc';
我已经开始将以下内容添加到我的〜/。 bashrc 文件:
function makestandard() {
perl -p -i -e 's/include\("([\w\.]+)"\)/include '$1'/g' $*
}
我source ~/.bashrc;
并在命令行中运行命令,如下所示:
$ makestandard myfile.php
我修改了 myfile.php ,但是不是捕获包含的文件名,而是包含的文件名已损坏为当前文件的名称。作为一个不知情的猜测,我认为bash $1
变量干扰了$1
perl regexp变量。
我该如何解决这个问题?
背景信息(无需阅读):我们已经开始使用PHP_CodeSniffer (phpcs)来嗅探PHP代码并报告任何不好的“气味”。不幸的是,phpcs没有修复非标准代码,只报告它。因此,我想制作一个脚本来修复PHP代码的一些简单和常见的非标准元素。我打算用一堆perl pie填充我的makestandard
bash函数。
Shell环境:Ubuntu 10.04中的开箱即用。
答案 0 :(得分:5)
你应该从你的简单引号中删除最后一个括号:
perl -p -i -e "s/include\(\"([\w\.])+\"\)/include '\$1'/g" $*
答案 1 :(得分:4)
它不是bash变量,而是单引号bash字符串中的单引号。
答案 2 :(得分:0)
最初的Perl声明如果有效,就会找到
include("something.php")
并撰写
include 'something.php')
也就是说,它会删除左括号并用双..替换双引号,而不是根据需要更改扩展名。
以下似乎与OP的预期方式相同:
function makestandard() {
perl -p -i -e 's/include\("(\w+)\.inc"\)/include("$1.php")/g' $*
}