Reputation: 13257
I have the following file:
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
How can I extract the lines between two hostname line entries using Perl?
Upvotes: 0
Views: 346
Reputation: 958
How about:
#!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
Upvotes: 1
Reputation: 39158
split
indeed suffices, just give it the right pattern.
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';
output
$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";
Upvotes: 0
Reputation: 434635
Slurp the whole thing into a string, $string
, and do something like this:
$string =~ /hostname = abc\n(.*)hostname = xyz\n/s;
The lines between the abc
and xyz
hostname lines will be in $1
after that.
Upvotes: 0