2
下面是兩個strings-Perl的正則表達式零次或一次比賽
12/31/2011 05:34:27;U;11.comp;host=win workgroup=home username=bob cmemory=1325133456 qmemory=1325133456 smemory=1325133456 uptime=1325289867
12/31/2011 01:09:20;D;12.comp;host=win workgroup=home username=sam cmemory=1325151687 qmemory=1325151687 smemory=1325151687 uptime=1325228636 session=4677 downtime=1325270175 Exit_status=0
從上面的字符串我要挑在Perl中使用正則表達式host
,workgroup
,username
,uptime
和downtime
值。
下面是我的Perl腳本 -
foreach $line (<FILE>) {
if($line =~ m<\d{2}/\d{2}/\d{4}\s+\d{2}:\d{2}:\d{2};[U|D].*host=(\w+)\s+workgroup=(\w+)\s+hostname=(\w+)\s+.*uptime=(\d+)\s+.*(downtime=)?(\d*)>){
my $host = $1;
my $workgroup = $2;
my $hostname = $3;
my $uptime = $4;
my $downtime = $5;
print "host=$host workgroup=$workgroup hostname=$hostname uptime=$uptime downtime=$downtime\n";
}
}
唯一的問題,我面對這裏是因爲downtime
。該屬性可能不存在於該行中。我無法正確選擇此字段。
這很酷。兩個問題(1)你能給我推薦'Regex'嗎? (2)你可以修改你的分割,以便它可以選擇'U'和'11.comp'? – 2013-03-12 17:50:24
@RaviJoshi - 不要使用正則表達式來做到這一點。使用正確的工具來完成正確的工作。 – 2013-03-12 18:08:36
@JackManey:我很困惑! 「正確工作的正確工具」。請詳細解釋一下。爲什麼不是正則表達式? – 2013-03-12 18:10:42