写一个命令输出到一个文件并匹配一个字符串

问题描述:

我是新来的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; 
      } 
     } 
    } 

输出:死在perl_sysboottime.pl线8

+1

你想干什么通过调用'打开我的$ CMD, ' aristotll

作为由打印的错误指示,脚本是死于第一次它执行

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

这意味着open未能打开一个文件。

我对Windows的命令并不熟悉,但我会以systeminfo为例给出here的输出结果。

执行第4行后,将阵列@cmdout包含由systeminfo输出的行。当执行第8行时,$file已被设置为输出的第一行,或Host Name: COMPUTERHOPE\n(注意结尾的换行符)。这不是一个文件名,所以open失败。

它看起来像你试图通过一个文件的行迭代的两种不同的方式,另一个里面一个结合。尝试是这样的:

foreach my $line (@cmdout) { 
    if ($line =~ m/.*System Boot.*/i) { 
     print $line; 
    } 
} 
+0

这个工作非常感谢 – user3834663