如何在perl脚本中加入'perl -pne'功能

pol*_*nts 1 perl

所以在命令行我可以方便地做这样的事情:

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)


hob*_*bbs 6

相关问题的答案你没问:在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)