所以在命令行我可以方便地做这样的事情:
perl -pne 's/from/to/' in > out
Run Code Online (Sandbox Code Playgroud)
如果我需要重复这个和/或我还有其他几个perl -pne转换,我可以将它们.bat放在Windows中的文件中.当然,这是一种相当迂回的方式.我应该编写一个perl包含所有这些正则表达式转换的脚本.
那么你怎么写呢?如果我有一个包含这些行的shell脚本:
perl -pne 's/from1/to1/' in > temp
perl -pne 's/from2/to2/' -i temp
perl -pne 's/from3/to3/' -i temp
perl -pne 's/from4/to4/' -i temp
perl -pne 's/from5/to5/' temp > out
Run Code Online (Sandbox Code Playgroud)
我怎样才能将这些全部放入一个perl脚本中?
dax*_*xim 10
-e接受任意复杂的程序.所以加入你的替换操作吧.
perl -pe 's/from1/to1/; s/from2/to2/; s/from3/to3/; s/from4/to4/; s/from5/to5/' in > out
Run Code Online (Sandbox Code Playgroud)
如果你真的想要一个处理输入和循环显示的Perl程序,那么解析一行代码以查看生成的代码并从此处开始工作.
> perl -MO=Deparse -pe 's/from1/to1/; s/from2/to2/; s/from3/to3/; s/from4/to4/; s/from5/to5/'
LINE: while (defined($_ = <ARGV>)) {
s/from1/to1/;
s/from2/to2/;
s/from3/to3/;
s/from4/to4/;
s/from5/to5/;
}
continue {
print $_;
}
-e syntax OK
Run Code Online (Sandbox Code Playgroud)
相关问题的答案你没挺问:在perl的特殊变量 $^I,与一起使用@ARGV,给人的就地编辑行为-i.与-p选项一样,Deparse将显示生成的代码:
perl -MO=Deparse -pi.bak -le 's/foo/bar/'
BEGIN { $^I = ".bak"; }
BEGIN { $/ = "\n"; $\ = "\n"; }
LINE: while (defined($_ = <ARGV>)) {
chomp $_;
s/foo/bar/;
}
continue {
print $_;
}
Run Code Online (Sandbox Code Playgroud)