• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 124
  • Last Modified:

read a file and replace certain lines

All,

How would I read through a file and replace lines that contain a certain word?

e.g.

The following test file is in existence

name,  age,  interests
bill,  30 ,  Football
Mark,  15 ,  Computers
Jill,  10 ,  Nothing!

If I wanted to loop through this file and replace the line containing Mark's age and interests with something else how would I go about that?

0
cyrobinson
Asked:
cyrobinson
  • 2
  • 2
1 Solution
 
ahoffmannCommented:
perl -i.bak -pe 's/Mark/whatever/' file
0
 
rj2Commented:
If you want to change Marks age to 35 and his interests to Women, you could try sample below.
Just paste the line into a DOS prompt. Change filename from data.txt to correct filename in your system.

perl -i.bak -pe "s/Mark,(\s*)\d*(\s*),(\s*)\w*/Mark,\1\Q35\E\2,\3Women/" data.txt

If you don't need to preserve the spaces you could try the somewhat simpler line below instead.

perl -i.bak -pe "s/Mark,.*/Mark,35,Women/" data.txt

0
 
cyrobinsonAuthor Commented:
i was more wanting to loop over each line of an input file from within a perl script and modify each line like that
0
 
rj2Commented:
The one-liner above does that.
But here it is like a regular script (not one-liner)

#!/usr/bin/perl
use strict;

my($file)="data.txt";
my($backupfile)="data.bak";

unlink($backupfile);
rename($file,$backupfile);
open(INFILE,$backupfile);
open(OUTFILE,">$file");
while(<INFILE>) {          
     s/Mark,(\s*)\d*(\s*),(\s*)\w*/Mark,\1\Q35\E\2,\3Women/;    
     print OUTFILE $_;
}
0
 
ahoffmannCommented:
>  was more wanting to loop over each line of an input file from within a perl script and modify each line like that

This is exactly what my suggestion does :-)
0

Featured Post

[Webinar] Improve your customer journey

A positive customer journey is important in attracting and retaining business. To improve this experience, you can use Google Maps APIs to increase checkout conversions, boost user engagement, and optimize order fulfillment. Learn how in this webinar presented by Dito.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now