我在命令行上运行perl -e以使用perls regex功能来查找并替换许多文件中的字符串。但是,我已经在脚本中测试了我的正则表达式以及许多正则表达式测试器,但是它似乎无法在命令行上运行。所以我开始怀疑是否因为它的命令行需要转义多余的字符。例如,我知道$
当我将其用作变量时必须转义,因此我认为也许我的命令中需要使用它。我正在使用linux。
这是我的命令:
perl -pi -w -e 's/"flags" : {[^"]+"CP" : 1[^"]+"prop_name" : "ID"[^:]+: "SKU"/"flags" : { "SET" : 1 }, "prop_name" : "ID", "rule" : "SKU+ProductId"/gms;' *_input.xml
我正在尝试匹配以下部分:
{
"flags" : {
"CP" : 1
},
"prop_name" : "ID",
"rule" : "SKU"
},
这样内部变为:
{
"flags" : {
"SET" : 1
},
"prop_name" : "ID",
"rule" : "SKU+ProductId"
},
这对您有用吗?当您执行多行匹配时,但是perl单行一次匹配一行,一旦在输入文件中命中换行符,该模式就会失败。
perl -0777 -pi -w -e 's/"flags" : {[^"]+"CP" : 1[^"]+"prop_name" : "ID"[^:]+: "SKU"/"flags" : { "SET" : 1 }, "prop_name" : "ID", "rule" : "SKU+ProductId"/gms;' *_input.xml
添加-0777
使perl使用整个文件进行输入。有关更多信息,请参见perlrun。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句