如何在bash脚本中使用Perl正则表达式字符?

Tom*_*Tom 0 php regex bash shell perl

我想要一个命令行函数,我可以在任何文件上运行以将include("myinc.inc");PHP语句更改为include 'myfile.inc';我已经通过将以下内容添加到我的〜/ .bashrc文件开始:

function makestandard() {
    perl -p -i -e 's/include\("([\w\.]+)"\)/include '$1'/g' $*
}
Run Code Online (Sandbox Code Playgroud)

source ~/.bashrc;在命令行运行命令,如下所示:

$ makestandard myfile.php
Run Code Online (Sandbox Code Playgroud)

我修改了myfile.php但是没有捕获包含的文件名,包含的文件名被破坏为当前文件的名称.作为一个不知情的猜测,我认为bash $1变量干扰了$1perl regexp变量.

我怎样才能解决这个问题?


背景信息(无需阅读):我们已经开始使用PHP_CodeSniffer(phpcs)来嗅探PHP代码并报告任何不好的"气味".不幸的是,phpcs没有修复非标准代码,只报告它.因此,我想制作一个脚本来修复PHP代码的一些简单和常见的非标准元素.我计划makestandard用一堆perl馅饼填充我的bash函数.

Shell环境:Ubuntu 10.04中的开箱即用.

Col*_*ert 5

你应该逃避你的简单引号删除最后一个括号:

perl -p -i -e "s/include\(\"([\w\.])+\"\)/include '\$1'/g" $*
Run Code Online (Sandbox Code Playgroud)