Reputation: 406
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 LOADS ld after line module some_1 {
The following code works fine for just one file i.e., if I replace some_1.xyz to *.xyz then the script doesn't work. I tried introducing sleep(xx) but the code doesn't work for multiple files and I could not figure out why it isn't working. Any pointers is appreciated. Thanks
@modulename_array = `grep "module " some_1.xyz | cut -f 2 -d ' '`;
@line = `grep "module " some_1.xyz`;
chomp(@line);
chomp(@kfarray);
$i = 0;
foreach (@modulename_array) {
print "Applying delay and load to $_.xyz $line[$i] \n";
`perl -ni -le 'print; print "\tAPPLY DELAY xx \n \tAPPLY LOADS ld\n" if/$line[$i]/' $_.xyz`;
$i++;
#sleep(3);
}
Upvotes: 2
Views: 21345
Reputation: 4398
one-liner
perl -pi -e '/module some_1/ and $_.="APPLY DELAY xx \nAPPLY LOADS ld\n"' files*.txt
Upvotes: 4
Reputation: 215
$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
Upvotes: 1
Reputation: 51
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
Upvotes: 5
Reputation: 596
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;
Upvotes: 3
Reputation: 34458
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 );
}
Upvotes: 0