我如何分割字符串

时间:2019-09-19 16:18:37

标签: perl split

全部

我有一个包含以下字符串的文件:

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!

2 个答案:

答案 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的三个参数形式。