http://qs1969.pair.com?node_id=446847


in reply to Re: replace a line when regex match...
in thread replace a line when regex match...

Yes. This is what I am looking for. This is what I have so far; what I am trying to do is log into several remote host and check for an existing entry, and change the whole line. If one does not exist then add it to the file.
#!/usr/bin/perl -w use strict; use Net::SSH::Perl; my $rcmd = " perl -e 'use strict; open(FD, filetochange.txt) or die \"can n +ot open FD: $!\"; while (<FD>) { if (/mon/ && /messages/) { print $_; #change line here } } close(FD); '"; my $ssh = Net::SSH::Perl->new('localhost', protocol=>('2,1')); $ssh->login('joe1','blabla'); my($stdout, $stderr, $exit) = $ssh->cmd("$rcmd"); print $stdout;
But I am getting this error:
Use of uninitialized value in concatenation (.) or string at ./hash_ms +gstab.pl line 6
Any idea? or does some one have a better idea of loging into a remote box and running an inline script on it? Thanks.

Replies are listed 'Best First'.
Re^3: replace a line when regex match...
by revdiablo (Prior) on Apr 12, 2005 at 05:25 UTC
    does some one have a better idea of loging into a remote box and running an inline script on it?

    Inlining like this can be a real pain. In your case, the interpolation phase is clobbering all your variables before you even pass the code to $ssh->cmd. You should probably be using single quotes. I think it would be a lot easier to avoid the inlining altogether, though, and just save the script to a file on the remote host.