I have an ASCII log file with some content I would like to extract. I've never taken time to learn Perl properly, but I figure this is a good tool for this task.
The file is structured like this:
... ... some garbage ... ... garbage START what i want is on different lines END ... ... more garbage ... next one START more stuff I want, again spread through multiple lines END ... more garbage
So, I'm looking for a way to extract the lines between each START
and END
delimiter strings.
How can I do this?
So far, I've only found some examples on how to print a line with the START
string, or other documentation items that are somewhat related with what I'm looking for.
You want the flip-flop operator (better known as the range operator) ..
#!/usr/bin/env perl
use strict;
use warnings;
while (<>) {
if (/START/../END/) {
next if /START/ || /END/;
print;
}
}
Replace the call to print
with whatever you actually want to do (e.g., push the line into an array, edit it, format it, whatever). I'm next
-ing past the lines that actually have START
or END
, but you may not want that behavior. See this article for a discussion of this operator and other useful Perl special variables.