我有一個Perl腳本,它運行perforce命令並將結果存儲在變量$command
中。使用Perl執行系統命令
然後它被存儲在一個文件log.txt
,並通過使用正則表達式相關數據被取出。
當我獨自運行該命令下面的事情蹦出:
4680 p4exp/v68 PJIANG-015394 25:34:19 IDLE none
8869 unnamed p4-python R integration semiconductor-project-trunktip turbolinuxclient 01:33:52 IDLE none
8870 unnamed p4-python R integration remote-trunktip-osxclient 01:33:52
的代碼去如下:
#! /usr/bin/env perl
use strict;
use warnings;
use autodie;
my $command = qx |p4 monitor show -ale|;
open FH, '>>', "log.txt";
print FH $command;
close FH;
open my $log_fh, '<', '/root/log.txt';
my %stat;
while ($line = <$log_fh>) {
chomp $line;
next if not $line =~ /(\d+)\s+/;
my $killid = $1;
if ($line =~ /R\s+integration/ and $line =~ /IDLE\s+none$/) {
my $killid_details = $line;
$stat{$killid} = $killid_details;
}
}
close $log_fh;
my $killpro;
foreach my $kill (keys %stat) {
print "$kill\n";
}
下得到編號8869,但如何做到這一點沒有日誌。文本。是使用數組更好的方式來做到這一點或哈希是好的?
請改正我,因爲我仍然在學習。
由於您使用的是EOL錨,因此不需要執行兩個單獨的正則表達式。它可以很簡單地組合成'/ R \ s +集成。* IDLE \ s + none $ /',即使它只有一行,我也會使用'/ R [^ \ S \ n] +集成。* IDLE [^\ S \ n] +無$ /'確定。 – sln