in reply to Re: substitute on file line by line not working syntax error
in thread Search and Replace line by line not working on Filehandle

changed this the comma was missing:
print OUT $_ , "\#\ SQLNET\.AUTHENTICATION_SERVICES=\ (NTS)";
OK. Now the line prints, i wanted it to overwrite the original line but it prints to the next line maybe i need to "remember" the line number and overwrite it?
result:
SQLNET.AUTHENTICATION_SERVICES= (NTS) 1# SQLNET.AUTHENTICATION_SERVICES= (NTS)<p>
Are the parentheses around (NTS) interpreted as "backreference" and printed before as 1 ...?

Thanks
MH

Replies are listed 'Best First'.
Re^3: substitute on file line by line not working syntax error
by ikegami (Patriarch) on Jan 15, 2010 at 09:03 UTC
    If you want just the new line, not the old and the new one, don't print the old one ($_).
      Ah ok. Thanks. Thats one fault (recycled old code without thinking first). But it prints a line **after** the line that should be changed, i want to **overwrite** the line not "append". Any idea? Something like moving the "Write Pointer" back 1 line and write it there?


      Thanks
      MH
        Sure you can, BUT the new record (line) must be exactly the same length as the old one. For example, if you just want to comment out a line by placing a '#' at the front then you cannot overwrite the existing line since that would be one extra character - you would overwrite the first character of the next line in the file.

        Here is a simple example where the new line is the same length as the old:
        use warnings; use strict; use Fcntl qw(SEEK_CUR); # open existing file for read/write open (my $in, '+<', 'file1.txt') || die "Unable to open file1.txt:$!"; while (<$in>) { # Identify the record if (/4444/) { # Construct the new record s/4/#/g; # Position the file pointer seek ($in, -length($_)-1, SEEK_CUR); print $in $_; } } close $in;
        Input file was:
        111111111111111 22222222 33333333333 4444444 5555555555555555 66666666666
        file after processing is:
        111111111111111 22222222 33333333333 ####### 555555555555555 66666666666