全部
我有一个包含以下字符串的文件:
VERIFYFAIL usbhd-sdb "There were 1 files with viruses detected. The device has been detached. Infections found: "
这是我得到结果的代码:
#!/usr/bin/perl
open( INFILE, "/home/me/scan_result" ) || die "Can't open file";
push( @lines, $_ ) while <INFILE>;
print @lines, "\n";
($result_string) = (split /"/, @lines)[1];
print $result_string, "\n";
close INFILE;
但是,虽然第一次打印成功打印了文件中的字符串,但是第二次打印却打印了空行。
基本上,我正在寻找引号之间的字符串。但是由于某种原因,我无法得到它。
有人可以看到我的错误吗?
TIA!
答案 0 :(得分:1)
该代码将输入视为多个行。要对数组的元素进行运算,您需要使用error: <EXPR>:1:1: error: non-nominal type '$__lldb_context' (aka 'Self') cannot be extended
extension $__lldb_context {
^ ~~~~~~~~~~~~~~~
error: <EXPR>:19:27: error: value of type 'Self' has no member '$__lldb_wrapped_expr_28'
$__lldb_injected_self.$__lldb_wrapped_expr_28(
~~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~
:
map
答案 1 :(得分:1)
方法1: 您可以使用正则表达式匹配来获取双引号之间的字符串。了解“模式记忆” here。
my $file = "/path/to/scan_result";
open (my $infile, "<", $file) or die "Can't open :$!";
while (<$infile>) {
print $1."\n" if ($_ = /\"(.*)\"/);
}
方法2: 与您的代码类似,将字符串用双引号引起来,并在分割后从数组中获得索引1的值。
my $file = "/path/to/scan_result";
open (my $infile, "<", $file) or die "Can't open :$!";
while (<$infile>) {
print [split /\"/, $_]->[1]."\n";
}
并且,始终使用open的三个参数形式。