如何将参数传递给Perl一个班轮?

时间:2013-07-30 07:00:46

标签: perl

#!/usr/bin/perl
my $a;
$a=qx(date --date "+3 min" '+ %Y/%m/%d-%H:%M:%S');
system( q(perl -pi.back -e 's{/2013/07/31-05:54:14/}{$a}g;' /tmp/ron/replace.txt));

我从服务器获取日期为其添加3分钟并将其分配给$ a变量,但我无法使用一个衬垫打印它。如何在perl one liner中打印变量?

1 个答案:

答案 0 :(得分:3)

如果您在bash中执行此操作,则使用以下sed命令替换整个操作可能更简单:

sed 's!/2013/07/31-05:54:14/!'"$(date --date "+3 min" '+ %Y/%m/%d-%H:%M:%S')"'!g'

这会将date命令的输出插入sed替换字符串。

另外,我发现你的搜索字符串的开头和结尾有一个/个字符。你的意思是把它们作为搜索字符串的一部分包括在内吗?

在原始命令中,您需要将$a插入到system命令中,您可以这样做:

#!/usr/bin/perl
my $a;
$a = qx(date --date "+3 min" '+ %Y/%m/%d-%H:%M:%S');
system( q(perl -pi.back -e 's{/2013/07/31-05:54:14/}{) . $a . q(}g;' /tmp/ron/replace.txt));

$a不会在q()字符串内扩展(相当于'所包围的字符串)所以我已关闭q()并连接{{ 1}}重新开放的$a

从perl脚本中调用perl有点笨重。从本质上讲,你只是想在单行中使用date命令的输出,所以这样的事情也可能更简单:

q()

虽然这与使用bash$ perl -pi.back -e 's{/2013/07/31-05:54:14/}{'"$(date --date "+3 min" '+ %Y/%m/%d-%H:%M:%S')"' /tmp/ron/replace.txt 非常相似。