Как мне разбить строку - PullRequest
       3

Как мне разбить строку

0 голосов
/ 19 сентября 2019

ALL,

У меня есть файл, который содержит следующую строку:

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 ]

1 голос
/ 20 сентября 2019

Метод 1: Вы можете использовать регулярное выражение, чтобы получить строку между двойными кавычками.Узнайте о «Памяти паттернов» здесь .

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 .

1 голос
/ 19 сентября 2019

Этот код обрабатывает ввод как несколько строк.Чтобы применить операцию к элементам массива, вам нужно использовать map:

my @result_strings = map {(split /"/, $_)[1]} @lines;
print join "\n", @result_strings; print "\n";

...