-2
我有一個具有一些行這樣一個文件:定義中擊或Perl的變量與正則表達式
{"v":0,"_id":"54ff561168a","time":"1421165205"}
欲使用bash讀取每一行,並設置的時間值Variable
(t)並用其他時間戳代替date -d @{$t}
您知道如何使用正則表達式獲取時間值作爲變量?
我有一個具有一些行這樣一個文件:定義中擊或Perl的變量與正則表達式
{"v":0,"_id":"54ff561168a","time":"1421165205"}
欲使用bash讀取每一行,並設置的時間值Variable
(t)並用其他時間戳代替date -d @{$t}
您知道如何使用正則表達式獲取時間值作爲變量?
那就是JSON。您可以在Perl解析JSON像這樣:
#!/usr/bin/perl
use strict;
use warnings;
use JSON;
use Data::Dumper;
my $text = '{"v":0,"_id":"54ff561168a","time":"1421165205"}';
my $data = decode_json ($text);
print Dumper $data;
print $data -> {"time"},"\n";
$data -> {"time"} = time();
$text = encode_json($data);
print "Result:\n";
print $text;
你不需要正則表達式 - 而事實上,你應該主動迴避他們,因爲JSON
允許你格式化與例如數據換行/縮進 - 在語義上是相同的。
例如你可以輸出上面的例子:
{
"_id" : "54ff561168a",
"time" : 1433859139,
"v" : 0
}
使用:
$text = to_json($data, {pretty => 1});
這意味着同樣的事情,但不同的正則表達式適用得益於改變空格等
如果您希望操作/重新格式化您的時間戳,我會將您推薦給優秀的Time::Piece
模塊:
use Time::Piece;
my $t = localtime ($data -> {"time"});
print $t;
會給:
Tue Jan 13 16:06:45 2015
如果你想有一個特定的格式:
print $t->strftime("%Y/%m/%d %H:%M:%S"),"\n";
,並提供:
2015/01/13 16:06:45
使用JSON解析器。 – Biffen