TrevorWattanStewie有一个充满配置文件的目录,他想要转换它们。
通过比较“BEFORE”和“AFTER”可以最好地理解转换操作。
## ./configfile001.config
TrevorWattanStewie@oldmail.com;--blank--
## ./configfile002.config
TrevorWattanStewie@oldmail.com;--blank--
## ./configfile003.config
TrevorWattanStewie@oldmail.com;--blank--
## ./configfile004.config
TrevorWattanStewie@oldmail.com;--blank--
SallyWattanStewie@oldmail.com;--blank--
RickyWattanStewie@oldmail.com;--blank--
## ./configfile001.config
TrevorWattanStewie@newmail.com;configfile001.config
## ./configfile002.config
TrevorWattanStewie@newmail.com;configfile002.config
## ./configfile003.config
TrevorWattanStewie@newmail.com;configfile003.config
## ./configfile004.config
TrevorWattanStewie@newmail.com;configfile004.config
SallyWattanStewie@newmail.com;configfile004.config
RickyWattanStewie@newmail.com;configfile004.config
@oldmail
更改为@newmail
Trevor使用的oneliner如下:
perl -pi -e '$curf=$ARGV[0];s/--blank--/$curf/; s/@oldmail.com/@newmail.com/;' *.asc
当Trevor运行脚本时,输出不符合他的期望。
实际结果如下:
## ./configfile001.config
TrevorWattanStewie@oldmail.com;configfile002.config
## ./configfile002.config
TrevorWattanStewie@oldmail.com;configfile003.config
## ./configfile003.config
TrevorWattanStewie@oldmail.com;configfile004.config
## ./configfile004.config
TrevorWattanStewie@oldmail.com;
SallyWattanStewie@oldmail.com;
RickyWattanStewie@oldmail.com;
@oldmail
转换为@newmail
?答案 0 :(得分:3)
您想使用variable $ARGV
,这是当前处理文件的名称。
所以s/--blank--/$ARGV/;
此外,@oldmail
(等)将在正则表达式内插,Wumpus Q. Wumbley注释。
我总是用-wE
运行我的单行。
答案 1 :(得分:2)
$ 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///
运算符插入变量,包括数组。您需要使用\@