Как разделить файл на разделитель, который находится на отдельной строке? - PullRequest
0 голосов
/ 01 марта 2011

У меня есть следующий файл:

some data
some data 1
some data 1
hostname = abc
some data
some data 1
some data 1
some data
some data 1
some data 1
hostname = xyz
some data
some data 1
some data 1
some data
some data 1
some data 1
hostname = pqr
some data
some data 1
some data 1
some data
some data 1
some data 1

Как мне извлечь строки между двумя строками имени хоста, используя Perl?

Ответы [ 4 ]

1 голос
/ 02 марта 2011

Как насчет:

#!perl -w
my @someArray;

while (<DATA>) {
    if (/hostname.*/) {
        print @someArray;
        @someArray = ();
    }
    else {
        push (@someArray, $_);
    }
}

__DATA__
some data
some data 1
some data 1
hostname = abc
some data
some data 1
some data 1
some data
some data 1
some data 1
hostname = xyz
some data
some data 1
some data 1
0 голосов
/ 01 марта 2011

Слейте все это в строку, $string, и сделайте что-то вроде этого:

$string =~ /hostname = abc\n(.*)hostname = xyz\n/s;

Строки между abc и xyz строками имени хоста будут в $1 послечто.

0 голосов
/ 01 марта 2011

split действительно достаточно, просто дайте ему правильный шаблон.

use DDS; Dump split /hostname = .*\n/, 'some data
some data 1
some data 1
hostname = abc
some data
some data 1
some data 1
some data
some data 1
some data 1
hostname = xyz
some data
some data 1
some data 1
some data
some data 1
some data 1
hostname = pqr
some data
some data 1
some data 1
some data
some data 1
some data 1';

выход

$VAR1 = "some data\nsome data 1\nsome data 1\n";
$VAR2 = "some data\nsome data 1\nsome data 1\nsome data\nsome data 1\nsome data 1\n";
$VAR3 = "some data\nsome data 1\nsome data 1\nsome data\nsome data 1\nsome data 1\n";
$VAR4 = "some data\nsome data 1\nsome data 1\nsome data\nsome data 1\nsome data 1";
0 голосов
/ 01 марта 2011
perl -nle'/hostname = abc/../hostname = xyz/&&print' datafile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...