0
#!/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 中打印变量?

4

1 回答 1

3

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

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

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

另外,我看到您在/搜索字符串的开头和结尾都有一个字符。您的意思是将这些作为搜索字符串的一部分吗?

在您的原始命令中,您需要插入$asystem您可以这样做的命令中:

#!/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()并连接$a了重新打开的q().

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

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

尽管这与使用sed.

于 2013-07-30T07:23:54.830 回答