Fwd: [CMI.PM] Multi-line substitution?
Milt Epstein
mepstein at uiuc.edu
Wed Jan 21 16:20:28 CST 2004
On Wed, 21 Jan 2004, Arun Bhalla wrote:
> Argh. I sent this last night, I don't know why it didn't go through.
I saw it :-).
> ----- Forwarded Message
>
> To: CU Perlmongers <champaign-urbana at pm.org>
> From: Arun Bhalla <bhalla at uiuc.edu>
> Reply-To: Arun Bhalla <bhalla at uiuc.edu>
> Subject: Re: [CMI.PM] Multi-line substitution?
> Date: Tue, 20 Jan 2004 19:10:14 -0600
>
>
> Well, the problem in your example is that you are feeding the "-p"
> switch to perl. perl is feeding one line at a time to your script.
> There are two ways to go about it.
>
> Here is the easiest:
>
> You can pass perl an argument (0777) which will tell perl to process
> whole files at a time instead of splitting on any particular character
> (such as the default newline). So your script will work as is if
> you change the shebang line to: #!/usr/bin/perl -p0777i.old
>
>
> If you wish to make it into something more than a simple one-liner,
> if you read everything into a line (e.g.:)
>
> $document = join('', <>);
>
> then process that (e.g.:)
>
> $document =~ s/<p>.*<table border="0" width="800" cellpadding="15" cellspaci
> n
> g="0">/s;
>
> you should be golden. If this pattern occurs multiple times in the same
> file, you would need both a 'g' modifier and to add a '?' after the '*' to
> make it less greedy.
>
>
> Arun
>
>
>
>
> Mitch Kutzko writes:
> > Hi, folks -- I'm trying to remove the following three lines from a website
> > I run, and these three lines occur in many files on the site:
> >
> > <p>
> >
> > <table border="0" width="800" cellpadding="15" cellspacing="0">
> >
> >
> > I've looked in the Cookbook and on the web, and by all the accounts and
> > examples I can find, this should work, but it doesn't. Doesn't do a dang
> > thing, in fact. (Which tells me it's not matching, of course, but I don't
> > see how it can not match.)
> >
> >
> > #!/usr/bin/perl -pi.old
> > s/<p>.*<table border="0" width="800" cellpadding="15" cellspacing="0">/
> > /s
> >
> > If I reduce the match string down to the whole <table> command by itself,
> > it works fine. Basically, it just refuses to match across more than one
> > line.
> >
> > I've tried the following, all with the same utter lack of results over
> > multiple lines:
> >
> > #!/usr/bin/perl -pi.old
> > s/<p>.*<table border="0" width="800" cellpadding="15" cellspacing="0">/
> > /sm
> >
> > #!/usr/bin/perl -pi.old
> > s/<p>.*<table border="0" width="800" cellpadding="15" cellspacing="0">/
> > /smg
> >
> > #!/usr/bin/perl -pi.old
> > s/<p>.*<table border="0" width="800" cellpadding="15" cellspacing="0">/
> > /m
> >
> > #!/usr/bin/perl -pi.old
> > s/<p>.*<table border="0" width="800" cellpadding="15" cellspacing="0">/
> > /mg
> >
> > #!/usr/bin/perl -pi.old
> > s/<p>.*<table border="0" width="800" cellpadding="15" cellspacing="0">/
> > /sm
> >
> > #!/usr/bin/perl -pi.old
> > s/<p>.*?<table border="0" width="800" cellpadding="15" cellspacing="0">
> > //s
> >
> > #!/usr/bin/perl -pi.old
> > s/<p>..<table border="0" width="800" cellpadding="15" cellspacing="0">/
> > /s
> >
> > #!/usr/bin/perl -pi.old
> > s/<p>...<table border="0" width="800" cellpadding="15" cellspacing="0">
> > //s
> >
> > #!/usr/bin/perl -pi.old
> > s/\<p\>.*\<table border="0" width="800" cellpadding="15" cellspacing="0
> > "\>//s
> >
> > etc... (You get the idea by now, I'm sure... ;-) )
> >
> > This should be (and, of course, will turn out to be) painfully simple to
> > do. What am I not doing?
> >
> >
> > Thoughts? Ideas? Suggestions? Tequila?
> >
> > ;-)
> >
> > As always, thanks in advance!
> >
> > Mitch
> > --
> > Mitch Kutzko | mitch at dast.nlanr.net | mitch at ncsa.uiuc.edu | 217-333-1199
> > http://hobbes.ncsa.uiuc.edu/
> > _______________________________________________
> > Champaign-Urbana mailing list
> > Champaign-Urbana at mail.pm.org
> > http://mail.pm.org/mailman/listinfo/champaign-urbana
> >
>
> --
> Arun Bhalla
>
> ----- End of Forwarded Message
>
> _______________________________________________
> Champaign-Urbana mailing list
> Champaign-Urbana at mail.pm.org
> http://mail.pm.org/mailman/listinfo/champaign-urbana
>
Milt Epstein
Research Programmer
Integration and Software Engineering (ISE)
Campus Information Technologies and Educational Services (CITES)
University of Illinois at Urbana-Champaign (UIUC)
mepstein at uiuc.edu
More information about the Champaign-Urbana
mailing list