在命令行上运行perl -e时必须转义哪些字符

时间:2014-01-17 22:22:21

标签: regex perl command-line

我在命令行上运行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"
   },

1 个答案:

答案 0 :(得分:1)

这对你有用吗?在进行多行匹配时,但是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