將命令輸出寫入檔案並匹配字串

將命令輸出寫入檔案並匹配字串

我是 Perl 新手。我正在編寫下面的腳本來從 Windows 命令列印系統啟動時間資訊systeminfo。這裡看起來有些問題。我得到這樣的輸出。

有人可以幫助我嗎

use strict;
use warnings;
my $filename = 'sysinfo.txt';
my @cmdout = `systeminfo`;
open(my $cmd, '>', $filename) or die "Could not open file '$filename' $!";
print $cmd @cmdout;
foreach my $file (@cmdout) {
    open my $cmd, '<:encoding(UTF-8)', $file or die;
    while (my $line = <$cmd>) {
        if ($line =~ m/.*System Boot.*/i) {
            print $line;
        }
    }
}

輸出:

Died at perl_sysboottime.pl line 8.

答案1

你忘記括號了嗎?

open my $cmd, '<:encoding(UTF-8)', $file or die; 

open (my $cmd, '<:encoding(UTF-8)', $file) or die; 

答案2

您正在嘗試開啟命令 systeminfo 給出的每一行。它們不是文件,而是資訊行。

您的腳本的重新造訪版本可能是:

use strict;
use warnings;
my @cmdout = `systeminfo`;
foreach my $line (@cmdout) {
    print $line if $line =~ /System Boot/i;
}

或者,如果您想將資料保存在$filename

use strict;
use warnings;
my $filename = 'sysinfo.txt';
my @cmdout = `systeminfo`;
open(my $cmd, '>', $filename) or die "Could not open file '$filename' $!";
print $cmd @cmdout;
foreach my $line (@cmdout) {
    print $cmd $line if $line =~ /System Boot/i;
}

相關內容