Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

Re: removing lines that are in the end of a file

by BrowserUk (Patriarch)
on Apr 05, 2013 at 15:20 UTC ( [id://1027151]=note: print w/replies, xml ) Need Help??


in reply to removing lines that are in the end of a file

The answers so far do not seem to have noticed the first line which also contains "SIL".

This is pretty trivial using File::ReadBackwards:

#! perl -slw use strict; use File::ReadBackwards; my $file = $ARGV[ 0 ]; tie *BW, 'File::ReadBackwards', $file; my $lastpos = -s( $file ); while( <BW> ) { last unless /SIL/; $lastpos = tell( BW ) } truncate $file, $lastpos; close BW;

A sample run:


With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^2: removing lines that are in the end of a file
by bhargavkanakiya (Initiate) on Apr 19, 2013 at 09:33 UTC

    Thanks a lot to you. This also removes the last line with SIL. This is not how i wanted but still you have made my task a lot easier. I can add last SIL using other software that i am currently working on.

      This also removes the last line with SIL. This is not how i wanted

      ReadBackwards() has to do strange things with tell, so a little extra work is involved. Try this version:

      #! perl -slw use strict; use File::ReadBackwards; my $file = $ARGV[ 0 ]; tie *BW, 'File::ReadBackwards', $file; my $lastpos = -s( $file ); my $len = 0; while( <BW> ) { $len = length() +1; next unless length >1; last unless /SIL/; $lastpos = tell( BW ); } truncate $file, $lastpos + $len; close BW;

      Note: You won't need the +1 in the  $len = length() +1; line if you are not on Windows.


      With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1027151]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others pondering the Monastery: (8)
As of 2024-04-18 08:36 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found