#!/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 中打印变量?
#!/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 中打印变量?
如果您在 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()
并连接$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
.