写一个命令输出到一个文件并匹配一个字符串
问题描述:
我是新来的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
答
作为由打印的错误指示,脚本是死于第一次它执行
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
你想干什么通过调用'打开我的$ CMD, ' aristotll