regex - Perl - can't strip blank lines -


let's say, have file (it's not actual content hexdump):

0000000  \r  \n  \r  \n   t   h     s         s             f   0000010   l   e  \r  \n                              \r  \n   h   e   r 0000020   e   '   s       s   o   m   e       t   e   x   t  \r  \n 000002f  

if run following:

#!/usr/bin/perl use strict; use warnings; use file::slurp; $_ = read_file("file.txt");  s/^\s*$//mg; print; 

the output produced is:

0000000  \n   t   h     s         s             f     l   e  \r 0000010  \n  \n   h   e   r   e   '   s       s   o   m   e       t   e 0000020   x   t  \r  \n 

apparently, blank lines aren't stripped.

can point out i'm doing wrong?

in regexes, $ assertion can bit confusing. according docs, “match[es] end of line (or before newline @ end)”. behaves like

(?=\n\z)|\z 

with /m modifier, changes to

(?=\n)|\z 

this means \n not included in matched substring. want:

s/^\s*\n//mg; 

now there remain points in code should addressed. mainly, makes little sense read in whole file @ once, , run regex on it. rather, i'd do:

use strict; use warnings; use autodie;  open $fh, "<", "file.txt"; while (<$fh>) {   print if /\s/; # print if line contains @ least 1 non-space character                  # elegantly skips whitespace-only lines. } 

this assumes line endings consist entirely of whitespace characters , end \n. holds both \r\n , \n line endings. else, assign custom line endings like

local $/ = local $\ = "\r\n"; # input , output line endings while (<$fh>) {   chomp;  # remove line endings   print if /\s/; # print adds line ending again. } 

Comments

Popular posts from this blog

image - ClassNotFoundException when add a prebuilt apk into system.img in android -

I need to import mysql 5.1 to 5.5? -

Java, Hibernate, MySQL - store UTC date-time -