2013-07-30 42 views
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分鐘到它的日期並將其分配給$變量,但我無法使用這一個班輪打印。如何在Perl中打印一個變量?如何將參數傳遞給Perl一個班輪?

回答

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

相關問題