views:

1001

answers:

3

Hi! I simply wanna read in a logfile, do a search and replace, and then write out the changes to that same logfile.

What's the best practice way of doing this in Perl?

+6  A: 

I normally code up a one liner for this:

perl -i -pe 's/some/thing/' log.file

See Here

Todd Gardner
But why can't I use backreferances? Like perl -pi -e "s/foo(.*)bar/bar$1foo/" tezt2 doesn't work..
Your shell is probably corrupting the string. Try replacing your ""s with ''s so that the * doesn't get expanded.
Alex Feinman
Thanks that did it!
While strict is usually pointless for oneliners, enabling warnings with -w will occasionally catch problems for you; you should do it habitually.
ysth
+4  A: 

This is often done with a one-liner:

perl -pi.bak -e "s/find/replace/g" <file>

Note the -i.bak portion -- this creates a backup file with the extension .bak. If you want to play without a net you can do this to overwrite the existing file without a backup:

perl -pi -e "s/find/replace/g" <file>
Michael Carman
+1  A: 

or you can use sed (I know... you asked about perl):

sed -i 's/find/replace/g' <file>
Nathan Fellman