I have a file with the following syntax in some_1.xyz
module some_1 {
INPUT PINS
OUTPUT PINS
}
and I want to insert APPLY DELAYS xx and APPLY L
$text='bla bla mytext bla bla';
$find='.*mytext.*';
$repl='replacement';
$text=~ s/($find)/$1$repl/g;
$1 is basically your match and you can use it when you make the replacement, either before or after your $repl string. )))
EASY
And what's wrong with the easy solution?:
$data=`cat /the/input/file`;
$data=~s/some_1 {\n/some_1 {\nAPPLY DELAYS xx\nAPPLY LOADS ld\n/gm;
print $data;
Something much simpler, in just one line using SED (in case this question is for UNIX only and when the match is a fixed value, not regular expression):
sed -i -e "s/<match pattern>/<match pattern>\n<new line here>/g" file.txt
(The options have been swapped compared to the initial response, because the first comment.)
Notice the \n is to add a new line. Regards
one-liner
perl -pi -e '/module some_1/ and $_.="APPLY DELAY xx \nAPPLY LOADS ld\n"' files*.txt
I have no idea why your code isn't working, but I have trouble following your use of Perl inside backticks inside Perl. This is untested, but should work. I suggest you also "use strict;" and "use warnings;".
my @files = ("some_1.xyz", "some_2.xyz", ... );
for my $file in ( @files )
{
my $outfile = $file + ".tmp";
open( my $ins, "<", $file ) or die("can't open " . $file . " for reading: " . $!);
open( my $outs, ">", $outfile )
or die("can't open " . $outfile . " for writing: " . $!);
while ( my $line = <$ins> )
{
print { $outs } $line;
if ( $line =~ m/^module\s+/ )
{
print { $outs } "\tAPPLY DELAY xx\n\tAPPLY LOADS ld\n";
}
}
rename( $outfile, $file );
}