perlquestion
NovMonk
(see updates below):<p>
Greetings Monks. <p>
I want to write a program I can call while editing a file with VI and have it perform some actions on the lines of text I have selected, something like <p>
:1,17! perlprogram <p>
Where would I go to find some good examples of how to think about this? I can write something that would look though a whole file, but I want to be more selective about what gets changed. I want it to look at each line within those 17 and do things if it matches certain Regular Expressions. <p>
This may seem hopelessly archaic (it is), but I work for a company where we are making tons of these changes by hand, and a utility that would do this for us Might make people more willing to looks at more interesting uses for Perl. I've got a couple of seds that do it now, but a one shot program would be Much better. <p>
Thanks in advance. <p>
(update #1)<p>
Ha! I figured it out. Some of it anyway. This works: <p>
<Code>
#!/usr/bin/perl
while (<>) {
if (/'5'/) {
s/[Nn]01/N01(+5) /g;
s/'5'/'5';fac=5/g;
}
if (/'4'/) {
s/[Nn]01/N01(+4) /g;
s/'4'/'4';fac=4/g;
}
print "$_";
}
</Code>
<p>Thanks Paladin-- your example with the <> got me on the right track of profitable trial and error. And I will look more closely at the command line switches, too, sleepingsquirrel. I'd still appreciate more comments and ideas. Thanks again.
<p>(Update #2)<p>
Does anyone have any idea why the file so edited has a blank space at the beginning of each line? Here's a simpler (and cooler) program for reference: <p>
<Code>
#!/usr/bin/perl -w
while (<>) {
s/[Nn]01\(\+.\) /n01/g;
s/;fac=.//g;
unless (/^net/i) {print "$_";}
}
</Code>
<p>I am kind of proud of figuring out a way to get it to delete lines containing "net" when <p>
<Code>s/^net/d </Code>
<p>didn't work (Sorry, I learned sed first.) Thanks again, everyone. <p>
Update 3:<p>
Blank space was in the test file I was using. Nevermind. Thanks.