#!/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中打印变量?
答案 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
非常相似。