oneliner--多文件替换转换产生不同步的结果 上下文 perl 5.22 使用perl oneliner进行多文件转换 概述

oneliner--多文件替换转换产生不同步的结果 上下文 perl 5.22 使用perl oneliner进行多文件转换 概述,perl,substitution,Perl,Substitution,TrevorWattanStewie有一个满是配置文件的目录,他想转换它们 最好通过比较“之前”和“之后”来理解转换操作 以前的文件 之后的文件(所需结果) 逐步解释 特雷弗想: 用当前正在处理的文件的名称替换所有--blank--token 将所有子字符串从@oldmail更改为@newmail 特雷弗的尝试 Trevor认为完成这项工作的最快方法是使用perl oneliner脚本 Trevor使用的oneliner如下所示: perl -pi -e '$curf=$ARGV[0];s/

TrevorWattanStewie有一个满是配置文件的目录,他想转换它们

最好通过比较“之前”和“之后”来理解转换操作

以前的文件 之后的文件(所需结果) 逐步解释 特雷弗想:

  • 用当前正在处理的文件的名称替换所有--blank--token
  • 将所有子字符串从
    @oldmail
    更改为
    @newmail
特雷弗的尝试 Trevor认为完成这项工作的最快方法是使用perl oneliner脚本

Trevor使用的oneliner如下所示:

perl -pi -e '$curf=$ARGV[0];s/--blank--/$curf/; s/@oldmail.com/@newmail.com/;' *.asc
问题 当Trevor运行脚本时,输出不符合他的期望

实际结果如下:

perl -pi -e '$curf=$ARGV[0];s/--blank--/$curf/; s/@oldmail.com/@newmail.com/;' *.asc
之后的文件(实际结果) 问题
  • 为什么特雷弗的脚本无法将
    @oldmail
    转换为
    @newmail
  • 为什么文件编号不匹配?序列号被一个关闭

    • 特雷弗没有启用警告,因此遗漏了以下解释:

      $ perl -wpi -e '$curf=$ARGV[0];s/--blank--/$curf/; s/@oldmail.com/@newmail.com/;' *.asc
      Possible unintended interpolation of @oldmail in string at -e line 1.
      Possible unintended interpolation of @newmail in string at -e line 1.
      

      @oldmail
      @newmail
      是数组。
      s//
      操作符插入变量,包括数组。您需要使用
      \@

      Trevor没有启用警告,因此遗漏了以下解释:

      $ perl -wpi -e '$curf=$ARGV[0];s/--blank--/$curf/; s/@oldmail.com/@newmail.com/;' *.asc
      Possible unintended interpolation of @oldmail in string at -e line 1.
      Possible unintended interpolation of @newmail in string at -e line 1.
      
      @oldmail
      @newmail
      是数组。
      s//
      操作符插入变量,包括数组。您需要使用
      \@

      您要使用,它是当前处理的文件的名称

      所以
      s/--空白--/$ARGV/

      另外,
      @oldmail
      (etc)将插入正则表达式中,如注释所示

      我总是使用
      -wE

      运行我的一行程序,您要使用,这是当前处理的文件的名称

      所以
      s/--空白--/$ARGV/

      另外,
      @oldmail
      (etc)将插入正则表达式中,如注释所示


      我总是用
      -wE

      运行我的一行程序。。。特雷弗盯着这个太久了。这应该是显而易见的。谢谢Wumpus Q.Wumbley。。。特雷弗盯着这个太久了。这应该是显而易见的。谢谢Wumpus Q.Wumbley。。。这应该是显而易见的。谢谢你,zdim。。。这应该是显而易见的。谢谢zdim。
      $ perl -wpi -e '$curf=$ARGV[0];s/--blank--/$curf/; s/@oldmail.com/@newmail.com/;' *.asc
      Possible unintended interpolation of @oldmail in string at -e line 1.
      Possible unintended interpolation of @newmail in string at -e line 1.