使用-p将参数传递给perl

时间:2015-02-04 21:04:11

标签: regex perl

我有一个简短的perl脚本运行正则表达式替换文件: perl -pi -e 's/x/y/' <file> 我想将一个参数传递给脚本,因此它会用命令行参数替换y(例如perl -pi -e 's/x/$argv[1]/' <file>之类的东西,但我使用$ argv [1]在以下情况下不起作用 - 使用pi参数。

3 个答案:

答案 0 :(得分:5)

我从未明白对单行Perl程序的关注,我不明白为什么你不能编写Perl脚本文件来执行此操作。

但是,您可以从@ARGV中删除项目,并在-p循环开始之前将其保存在变量中。喜欢这个

perl -p -i -e 'BEGIN{ $r = pop } s/x/$r/' <file> <replacement>

答案 1 :(得分:3)

解决方案1:推出自己的循环。

perl -i -e'$r = shift; while (<>) { s/x/$r/; print }' "$replacement" "$file"

解决方案2:在编译时抓取var。

perl -i -pe'BEGIN { $r = shift; } s/x/$r/' "$replacement" "$file"

解决方案3:使用env var而不是参数

R="$replacement" perl -i -pe's/x/$ENV{R}/' "$file"

答案 2 :(得分:0)

perl -pi -e 's/x/y/' <file>等同于:

while (<>) {
   s/x/y/;
} 
continue {
   print or die "-p failed: $!\n";
}

这将通过表达式<file>传递s/x/y/;的每一行并打印结果。 (注意-i标志将修改<file> inplace)。如果您确实需要传递替换,为什么不直接在替换中列出它。无论哪种方式,它仍然只列出一次。

perl -pi -e 's/x/<replacement>/;' <file>