perl in place编辑同时替换多个值

问题描述:

我试图在文件上进行搜索和替换。下面的代码不起作用。 我在做什么错?请帮忙perl in place编辑同时替换多个值

$file = "/tmp/file"; 
    my $date = qx/date +'%Y%m%d-%H%M%S'/; 
    @accounts = qw($account1 $account2 $account3 $account4);  

    @ARGV = ($file) ; 
    $^I = ".$date" ; 
    while (my $line=<>){ 
     for my $account (@accounts) { 
     if ($line =~ /^$account/) { 
    ..<search and replace>.. 
    print $line; 
    }else{ 
     print $line ; 
    } 
    } 
    } 
+0

*总是*'使用严格'和'使用警告'在*每个* Perl程序的顶部。当你要求你的代码的帮助时,它只是礼貌的,因为你甚至没有采取最简单的步骤来自己解决问题。 – Borodin 2014-11-04 12:28:28

+0

感谢您的回复。我遇到的问题是循环。它不能正常工作 – user3477108 2014-11-04 12:53:21

+0

“@ choroba”的解决方案根本没有帮助你吗? – Borodin 2014-11-04 12:54:39

qw()引号的话,它不会内插变量。

@accounts = qw($account1 $account2 $account3 $account4); 

相当于

@accounts = ('$account1', '$account2', '$account3', '$account4'); 

注单引号!

相反,使用

@accounts = ($account1, $account2, $account3, $account4); 

BTW,而不是调用外壳调用date,您可以使用Time::Piece

use Time::Piece; 
my $lt = localtime; 
my $date = join '-', $lt->ymd(q()), $lt->hms(q()); 
+0

我的问题不是数组声明或时间。循环无法正常工作。如果你可以建议一种替代方式,那将会很棒。谢谢你的时间。 – user3477108 2014-11-04 12:54:41

+0

没有输入,输出中的内容没有提到。我们如何建议更好的解决方案。请清楚吗? – Praveen 2014-11-04 13:13:06

也请注意,行

$line =~ /^$account/ 

可能不要做你期望的事情。

尝试

$line =~ /^\Q$account\E/ 

此转义任何特殊字符(正则表达式中的特殊,例如支架)的正则表达式中,通常你想要做一个正则表达式中的变量是什么。