명령 출력을 파일에 쓰고 문자열과 일치시킵니다.

명령 출력을 파일에 쓰고 문자열과 일치시킵니다.

저는 펄을 처음 접했습니다. 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;
}

관련 정보