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 ;
}
}
}
答
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/
此转义任何特殊字符(正则表达式中的特殊,例如支架)的正则表达式中,通常你想要做一个正则表达式中的变量是什么。
*总是*'使用严格'和'使用警告'在*每个* Perl程序的顶部。当你要求你的代码的帮助时,它只是礼貌的,因为你甚至没有采取最简单的步骤来自己解决问题。 – Borodin 2014-11-04 12:28:28
感谢您的回复。我遇到的问题是循环。它不能正常工作 – user3477108 2014-11-04 12:53:21
“@ choroba”的解决方案根本没有帮助你吗? – Borodin 2014-11-04 12:54:39