Ok, I've made two modifications to what I originally posted
and now it works ok with your data. My original script would
never have worked properly with your report file, it worked
with the trivial example that I tested it on but how and ever.
Here is a working version:
#!/usr/bin/perl -w
use strict;
my ($REPFILE, $report);
undef $/;
open REPFILE, "report.rpt" or die "Cant open $REPFILE: $!\n";
$report = <REPFILE>;
$report =~ s/^User Report.*//mg;
$report =~ s/^All Users.*//mg;
$report =~ s/^User Name.*//mg;
$report =~ s/^-> Token.*//mg;
print $report;
close REPFILE;
Addition of m modifier to the substitution.
Because we are dealing with the whole report file in one
scalar it is effectively one string and the rule for ^ and $
is that they match at the start and end of a string, not a line.
To get ^ and $ matching at the start and end of a line instead
of a string we have to add the m modifier. Now it sees
the string in $report as a series of lines delimited by \n
characters.
Addition of .* to the regex to deal with the rest of the line.
By adding .* to the regex we cause it to match (i) start of line,
(ii) piece of text that we're using as a tag on the line, (iii) rest
of the line up to the next \n. A dot character in a regex matches
any character except a newline (\n). If you want it to match
a newline you can specify this using the s regex modifier.
Just to top off the confusion you can actually use both the s
and m modifiers on the same regex. Most people assume
that they mean single-line vs multi-line but actually they
mean match newlines with dot and match ^ and $ in lines not
in the whole string. |