oneliner--多文件替换转换产生不同步的结果 上下文 perl 5.22 使用perl oneliner进行多文件转换 概述
TrevorWattanStewie有一个满是配置文件的目录,他想转换它们 最好通过比较“之前”和“之后”来理解转换操作 以前的文件 之后的文件(所需结果) 逐步解释 特雷弗想: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/
- 用当前正在处理的文件的名称替换所有--blank--token
- 将所有子字符串从
更改为@oldmail
@newmail
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.