ric*_*i90 0 php bash perl zsh sed
我需要用等价的小写字母替换php应用程序中的所有include。我正在将旧版应用程序转换为Docker,并且该应用程序是在Windows中构建的。
我已经测试了以下正则表达式
(include.+)["'](\w+\.php)["'](.*)
Run Code Online (Sandbox Code Playgroud)
我已经尝试将其放入这样的单线perl命令中
perl -p -i -e '/(include.+)[\"\'](\w+\.php)[\"\'](.*)/\1\'\L\2\'\E\3/ `find ./ -name *.php`
Run Code Online (Sandbox Code Playgroud)
但我得到一个错误
(在'L2'之前缺少运算符??)在“ -L2'E3”附近的-e行1中,期望找到运算符的地方(在E3之前缺少运算符?)在-e第1行末尾的未知正则表达式修饰符“ / 1” -e第1行的行语法错误在“ /(include.+)[\"](w+.php)"'/1'L2'”附近-e的执行由于编译错误而中止。
我只需要将匹配的字符串替换为,$1'{lowercase $2}'$3但是我并不是一个perl或sed向导。
编辑
php的两个示例包括声明
include "something.php";
include_once "something.php";
include("SomethingElse.php");
include ('Something.php');
include_once("something.php");
include_once ("something.php");
Run Code Online (Sandbox Code Playgroud)
要小写include语句中的内容,就地更改输入文件
perl -i.bak -wpe's/include.*\K (([\x22\x27]) \w+\.php \g{-1})/\L$1/x;' file
Run Code Online (Sandbox Code Playgroud)
使用带有提供的include语句的文件进行了测试。
笔记:
该include.*下报价之前的名称匹配(以识别线),但随后回落\K,使我们不必捕获和复制的更换部件。有关更多信息,请参见扩展模式中的“环视断言 ” 。\K
引号"和'正在使用匹配的\x22和\x27,在字符类(它的棘手与文字引号)。然后,使用(相对)后向引用来 匹配结束引号\g{-1},因此它必须与开始引号相同
'AbC.php'首先捕获的整体(在中$1)用\Lsequence小写。这是可在任何内插构造中使用的少数转义之一
考虑添加锚点/^\s*(带有可选空格),仅在字符串开头匹配
该/x修改允许使用正则表达式的内部空间(和注释),为便于阅读
我添加了标志.bak以保持备份并-w打印警告。