sed application?

Top Page
Attachments:
Message as email
+ (text/plain)
Delete this message
Reply to this message
Author: Kevin Buettner
Date:  
Subject: sed application?
On Feb 13, 1:03pm, Mike Starke wrote:

> I have a case where I need to change the value
> of a variable in a number of Perl scripts.
>
> How would I take the results of a grep command
> and apply a change to it? For instance, if I
> issue the command:
>
> 'grep -r smtp_addr *'
>
> and get a bunch of results like:
>
> 1stfile: $smtp_adrr = "old_value";
> 2ndfile: $smtp_adrr = "old_value";
> 3rdfile: $smtp_adrr = "old_value";
> 4thfile: $smtp_adrr = "old_value";


Why not just use perl? The following script is probably overkill for
what you want to do, but I use scripts like it on a regular basis to
make edits in multiple files. If you're unsure about what you're
doing, you may wish to give $INPLACE_EDIT some other value than the
null string. E.g, you may wish to do

    $INPLACE_EDIT = '.bak';


instead.

--------- snip --------

#!/usr/bin/perl -w

use File::Find;
use FileHandle;
use IPC::Open3;
use English;

my ($root) = @ARGV;

if (!defined($root)) {
    die "Usage: $0 root\n";
}


@ARGV = ();

find(
    sub { 
    if (-f && -T) {
        push @ARGV, $File::Find::name;
    }
    },
    $root
);


$INPLACE_EDIT = '';
undef $/;            # slurp entire files


while (<>) {
    s/(\$smtp_adrr = )"old_value"/$1"new_value"/gx;
    print;
}