Now on to the problem.
I'm quite sure the program doesn't do what you think it is doing.
To make matters clearer I have pared down the program to its bare minimum:
Now you see that you read as one string the whole of each file into $file and then you operate your regexen on the default variable $_ which however you did not load with anything beforehand, hence the Use of uninitialized value warnings and finally you print the unchanged $file back to disk.#!/usr/bin/perl -w use strict; my $CF = "watch process procAlive 'bgs' 18 0x2 60 'Production Critical +: bgs failure. Restarting bgs' '/opt/EMPsysedge/bin/sysedge.sh'"; my $file = do { local $/; <DATA>}; s/^watch.*?'bgs'.*?sh'$//; s/^(watch.*?'cron'.*?sh'$)/$1\n$CF\n/; print $file; __DATA__ watch process procAlive 'cron' 1 0x2 60 'Production Critical: cro +n failure. Call USA POC' '/opt/EMPsysedge/bin/sysedge.sh' watch process procAlive 'inetd' 2 0x2 60 'Production Critical: in +etd failure. Call USA POC' '/opt/EMPsysedge/bin/sysedge.sh' watch process procAlive 'sendmail' 3 0x2 60 'Production Critical: sen +dmail failure. Call USA POC' '/opt/EMPsysedge/bin/sysedge.sh' watch process procAlive 'syslogd' 4 0x2 60 'Production Critical: sy +slogd failure. Call USA POC' '/opt/EMPsysedge/bin/sysedge.sh' watch process procAlive 'automountd' 5 0x2 60 'Production Critical: au +tomountd failure. Call USA POC' '/opt/EMPsysedge/bin/sysedge.sh' watch process procAlive 'xntpd' 6 0x2 60 'Production Critical: xn +tpd failure. Call USA POC' '/opt/EMPsysedge/bin/sysedge.sh' watch process procAlive 'itaagtd' 7 0x2 60 'Production Critical: it +aagtd failure. Call USA POC' '/opt/EMPsysedge/bin/sysedge.sh'
Don't try to be too clever and do it all at once! You need to do two things:
#!/usr/bin/perl -w use strict; my $CF = "watch process procAlive 'bgs' 18 0x2 60 'Production Critical +: bgs failure. Restarting bgs' '/opt/EMPsysedge/bin/sysedge.sh'"; while (<DATA>) { next if /bgs/; # skip printing the line with 'bgs' print; # print the line just read in print "$CF\n" if /cron/; # add '$CF' if we just printed the lin +e with 'cron' } __DATA__ watch process procAlive 'cron' 1 0x2 60 'Production Critical: cro +n failure. Call USA POC' '/opt/EMPsysedge/bin/sysedge.sh' watch process procAlive 'inetd' 2 0x2 60 'Production Critical: in +etd failure. Call USA POC' '/opt/EMPsysedge/bin/sysedge.sh' watch process procAlive 'sendmail' 3 0x2 60 'Production Critical: sen +dmail failure. Call USA POC' '/opt/EMPsysedge/bin/sysedge.sh' watch process procAlive 'syslogd' 4 0x2 60 'Production Critical: sy +slogd failure. Call USA POC' '/opt/EMPsysedge/bin/sysedge.sh' watch process procAlive 'automountd' 5 0x2 60 'Production Critical: au +tomountd failure. Call USA POC' '/opt/EMPsysedge/bin/sysedge.sh' watch process procAlive 'xntpd' 6 0x2 60 'Production Critical: xn +tpd failure. Call USA POC' '/opt/EMPsysedge/bin/sysedge.sh' watch process procAlive 'itaagtd' 7 0x2 60 'Production Critical: it +aagtd failure. Call USA POC' '/opt/EMPsysedge/bin/sysedge.sh'
CountZero
A program should be light and agile, its subroutines connected like a string of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little or too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity." - The Tao of Programming, 4.1 - Geoffrey James
In reply to Re: regex problem?
by CountZero
in thread regex problem?
by wcj75019
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |