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开发者_Go百科 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?
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
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.
perl -nle'/hostname = abc/../hostname = xyz/&&print' datafile
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";
精彩评论